2010-02-12 35 views
83

jQuery có id tương đương với câu lệnh sau không?jQuery Xác định xem một lớp phù hợp có một id nhất định

$('#mydiv').hasClass('foo') 

để bạn có thể đặt tên lớp và kiểm tra xem nó có chứa id được cung cấp không.

cái gì đó như:

$('.mydiv').hasId('foo') 
+0

Tôi muốn áp dụng một phong cách cho một div nhất định. Ví dụ tại thời gian tải tất cả với một lớp của foo sẽ được hiển thị, nhưng tôi có thể muốn chuyển đổi một ví dụ của lớp foo off có một id của thanh. –

+1

Sau đó, bạn chỉ cần làm '$ ('# bar.foo'). Toggle();' bạn sẽ chỉ bao giờ có một id khi chúng được yêu cầu là duy nhất cho tài liệu. nếu bạn kiến ​​chỉ chuyển đổi id đó nếu nó là của lớp 'foo' thì chỉ cần thêm lớp vào bộ chọn id. nếu bộ chọn tìm một tập trống thì sẽ không có gì xảy ra, nếu nó tìm thấy một tập hợp với các kết quả (trong đó sẽ chỉ có một) thì nó sẽ chuyển đổi phần tử. tôi nghĩ rằng bạn đang overthinking này. – prodigitalson

+0

Vâng, tất nhiên là cảm ơn. –

Trả lời

135

Bạn có thể nướng logic đó vào bộ chọn theo combining multiple selectors. Ví dụ: chúng tôi có thể nhắm mục tiêu tất cả các yếu tố có id đã cho, mà cũng có một lớp cụ thể:

$("#foo.bar"); // Matches <div id="foo" class="bar"> 

Điều này sẽ tương tự như thứ bạn viết trong CSS. Lưu ý rằng nó sẽ không áp dụng cho tất cả các thành phần #foo (mặc dù chỉ có một phần tử) và nó sẽ không áp dụng cho tất cả các phần tử .bar (mặc dù có thể có nhiều phần tử). Nó sẽ chỉ tham chiếu các yếu tố đủ điều kiện trên cả hai thuộc tính.

jQuery cũng có một tuyệt vời .is method cho phép bạn xác định xem phần tử có phẩm chất nhất định hay không. Bạn có thể kiểm tra một bộ sưu tập jQuery với một bộ chọn chuỗi, một phần tử HTML hoặc một đối tượng jQuery khác. Trong trường hợp này, chúng tôi sẽ chỉ kiểm tra đối với bộ chọn chuỗi:

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo' 
+22

+1 cho 'is()'. Nên có một bộ chọn '.hasId()' chỉ vì nó có vẻ như là một đối tác rõ ràng với '.hasClass()' thực sự ... –

39

tôi có lẽ sẽ sử dụng $('.mydiv').is('#foo'); Điều đó nói rằng nếu bạn biết lý do tại sao Id wouldnt bạn chỉ áp dụng nó vào bộ chọn ở nơi đầu tiên?

+17

Có thể mã đang chuyển sang chức năng gọi lại cần xử lý một trường hợp nhất định khác nhau. Vì vậy, hàm được truyền tự động một đối tượng jQuery với các thuộc tính không xác định. Trong trường hợp này, $ ('câu trả lời của bạn') là ('hữu ích'); –

+1

Tôi có thể nghĩ ra bất kỳ lý do nào. Điều gì sẽ xảy ra nếu bạn muốn áp dụng cài đặt cụ thể cho thiết bị di động, như thể một phần tử có id = "di động" hay không. Tại sao không quan trọng. – Placeable

+0

Cũng chỉ có 1 phần tử nên có một 'id' nếu không nó sẽ là một thuộc tính khác ... Tôi giả sử nếu vị trí cấu trúc của phần tử trong câu hỏi thay đổi dựa trên trang hoặc ứng dụng khách/tác nhân người dùng thì ok, nhưng hơn thế ... – prodigitalson

4
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ }); 
+0

mỗi cái không cần thiết vì sẽ không bao giờ có nhiều hơn một '# theMysteryId'. – prodigitalson

+2

Vâng, nó giúp bạn tránh được sự cố khi gán nó cho một biến, kiểm tra xem chiều dài có trống không, và sau đó tiếp tục với mã. Nếu bộ chọn không khớp với jQuery thì sẽ không gọi hàm "each", vì vậy nó đẹp và sạch sẽ. Bây giờ nếu tất cả các bạn muốn làm là gọi một số API jQuery, sau đó chắc chắn. – Pointy

4

Chỉ cần nói cuối cùng tôi đã giải quyết điều này bằng chỉ mục().

NOTHING else dường như hoạt động.

Vì vậy, đối với các yếu tố anh chị em, đây là một công việc tốt xung quanh nếu bạn lần đầu tiên lựa chọn bởi một lớp học phổ biến và sau đó muốn sửa đổi một cái gì đó khác nhau cho từng cụ thể.

EDIT: đối với những người không biết (như tôi) chỉ mục() đưa ra giá trị chỉ mục cho từng phần tử khớp với công cụ chọn, tính từ 0, tùy thuộc vào thứ tự của chúng trong DOM. Miễn là bạn biết có bao nhiêu yếu tố có với class = "foo" bạn không cần một id.

Rõ ràng điều này không phải lúc nào cũng hữu ích, nhưng ai đó có thể thấy nó hữu ích.

7

Hãy nói rằng bạn đang lặp lại thông qua một số đối tượng DOM và bạn muốn tìm và bắt một phần tử với một ID nhất định

<div id="myDiv"> 
    <div id="fo"><div> 
    <div id="bar"><div> 
</div> 

Bạn có thể viết một cái gì đó muốn tìm

$('#myDiv').find('#bar') 

Lưu ý rằng nếu bạn sử dụng bộ chọn lớp, phương thức tìm sẽ trả về tất cả các phần tử phù hợp.

hoặc bạn có thể viết một chức năng iterating rằng sẽ làm việc cao cấp hơn

<div id="myDiv"> 
    <div id="fo"><div> 
    <div id="bar"><div> 
    <div id="fo1"><div> 
    <div id="bar1"><div> 
    <div id="fo2"><div> 
    <div id="bar2"><div> 
</div> 

$('#myDiv div').each(function() { 
    if($(this).attr('id') == 'bar1') 
     //do something with bar1 
}); 

Cùng mã có thể dễ dàng sửa đổi cho selector lớp.

<div id="myDiv"> 
    <div class="fo"><div> 
    <div class="bar"><div> 
    <div class="fo"><div> 
    <div class="bar"><div> 
    <div class="fo"><div> 
    <div class="bar"><div> 
</div> 

$('#myDiv div').each(function() { 
    if($(this).hasClass('bar')) 
     //do something with bar 
}); 

Tôi vui vì bạn đã giải quyết được vấn đề của mình với chỉ mục(), điều gì đã hiệu quả với bạn. Tôi hy vọng điều này sẽ giúp những người khác có cùng vấn đề. Chúc mừng :)

17

Tôi biết câu hỏi cũ nhưng nó vẫn còn trên đầu trên kết quả của Google, mới hơn jQuery cung cấp .has() chức năng

$('.mydiv').has('#foo') 
+5

Xin lỗi nhưng tôi nghĩ bạn đã hiểu sai câu hỏi: [has() API] (http://api.jquery.com/has/) báo cáo điều này: Giảm tập hợp các phần tử được đối sánh thành các phần tử có * con cháu * phù hợp với bộ chọn hoặc phần tử DOM. OP hỏi làm thế nào để kiểm tra nếu phần tử có lớp 'myDiv' cũng là Id foo, trong khi có() sẽ tìm con cháu của 'myDiv' có Id 'foo'. – Tilt

3

Kiểm tra xem ID yếu tố là tồn tại

if ($('#id').attr('id') == 'id') 
 
{ 
 
    //OK 
 
}

-1

Bạn cũng có thể kiểm tra xem phần tử id có được sử dụng hay không bằng cách thực hiện:

if(typeof $(.div).attr('id') == undefined){ 
    //element has no id 
} else { 
    //element has id selector 
} 

tôi sử dụng phương pháp này cho DataTables toàn cầu và DataTables ra lệnh cụ thể

Các vấn đề liên quan