2012-01-05 22 views
61

Tôi có dòng mã này:Làm thế nào để sử dụng trong jQuery: không và hasClass() để có được một yếu tố cụ thể mà không cần một lớp

$('#sitesAccordion .groupOfSites').click(function() { 
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)'); 
    console.log(lastOpenSite); 
}); 

tôi nhận được "false" thay vì nhận được một trong các yếu tố khác (giả sử rằng có một - và phải có). Tôi đoán vấn đề là:

.hasClass(':not(.closedTab)'); 

Sự cố là gì?

Mục đích của tôi là tạo ra accordion của riêng tôi (không sử dụng jQuery UI)

và tôi đang cố gắng để viết nó như thế này:

$('#sitesAccordion .groupOfSites').click(function() { 

    //Get the last opened tab 
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)'); 

    //Close last opened tab and add class 
    lastOpenSite.hide().toggleClass('closedTab'); 

    //Open the current Tab 
    $(this).children('.accordionContent').toggle('fast'); 

    // remove class from open tab 
    $(this).toggleClass('closedTab'); 


}); 

Đây có phải là cách tốt nhất? cảm ơn, Alon

Trả lời

94

Sử dụng not chức năng thay vì:

var lastOpenSite = $(this).siblings().not('.closedTab'); 

hasClass chỉ kiểm tra xem một phần tử có một lớp học, not sẽ loại bỏ các yếu tố từ các thiết lập lựa chọn phù hợp với bộ chọn cung cấp.

+0

ohh - đó là một sai lầm ngớ ngẩn mà tôi đã làm - cảm ơn câu trả lời! – Alon

7

Phương thức hasClass() của jQuery trả về giá trị boolean (true/false) và không phải là phần tử. Ngoài ra, tham số được gán cho nó là tên lớp và không phải là bộ chọn như vậy.

Đối với ví dụ: x.hasClass('error');

71

Đó là dễ dàng hơn nhiều việc phải làm như thế này:

if(!$('#foo').hasClass('bar')) { 
    ... 
} 

Các! trước các tiêu chí có nghĩa là sai, hoạt động ở hầu hết các ngôn ngữ lập trình.

+0

Điều này sẽ không hoạt động cho những gì OP đang cố gắng thực hiện. Nó chỉ kiểm tra xem '# foo' có một lớp hay không, nó không làm giảm tập hợp các phần tử phù hợp với những phần tử có nó. –

+0

thx. đang làm việc. – mboeckle

+3

cách này hoạt động khá tốt trong hoàn cảnh khác hoàn toàn của tôi. cảm ơn. – richfinelli

1

Tôi không biết nếu điều này là sự thật ở thời điểm niêm yết ban đầu, nhưng phương pháp anh chị em cho phép selectors, vì vậy làm giảm những gì OP niêm yết nên công việc.

$(this).siblings(':not(.closedTab)'); 
Các vấn đề liên quan