2010-09-12 31 views
5

Tôi có các phần tử DOM mà tôi muốn loại trừ khỏi một hàm .click bằng cách thêm một lớp "noEdit" mà tôi gặp phải là một số thành phần có nhiều lớp :Câu lệnh jQuery và If Not Matching Vì nhiều lớp

<td class="firstCol noEdit"> // <-- wont work 
<td class="noEdit"> // <-- works fine 

Và jQuery:

$('td').click(function(){ 
    if($(this).attr('class') != "noEdit"){ 
     alert('do the function'); 
    }); 

suy nghĩ?

Trả lời

6

Nếu bạn truy vấn thuộc tính class với attr(), nó chỉ trả về giá trị dưới dạng một chuỗi. Tình trạng đó không cho bạn đầu tiên <td> vì mã của bạn sẽ cố gắng so sánh

"firstCol noEdit" != "noEdit" 

nào trả về true (vì chúng không bằng nhau) và gây ra cảnh báo của bạn để hiển thị.

Bạn sẽ muốn nhìn vào hasClass() chức năng thay vào đó, mà phân tích danh sách lớp cho bạn và kiểm tra sự hiện diện của lớp đưa ra trong các thuộc tính:

$('td').click(function() { 
    if (!$(this).hasClass("noEdit")) { 
     alert('do the function'); 
    } 
}); 
+0

cả hai câu trả lời tuyệt vời, tôi đã được nhiều hơn tìm kiếm này mặc dù, như tôi có thể thực hiện một chức năng khác với mục tiêu sự kiện của tôi rằng có lớp noEdit. Cảm ơn :) –

+0

@ Jascha: đó sẽ là ba câu trả lời tuyệt vời; Dave chỉ cần đăng;) – BoltClock

4

Làm thế nào về việc sử dụng một bộ lọc thuộc tính:

// != means 'not exactly matching', whereas *= means 'contains' 
$('td[class!=noEdit]').click(function(){ 
    alert('do the function'); 
}); 
+2

Điều đó có vẻ sạch hơn nhiều (nếu điều kiện cũng không còn cần thiết vì OP chỉ muốn lọc các công cụ tùy thuộc vào lớp 'noEdit'). +1 – BoltClock

+0

@Boltclock - Heh, tôi nhận ra rằng tôi đã để lại câu lệnh 'if' trong câu trả lời. Làm thế nào freaking ngu ngốc. (cố định bây giờ, nhưng ...) – karim79

+1

hasClass có thể nhanh hơn mặc dù, .... Nó sẽ là đáng giá để kiểm tra tốc độ này so với điều đó. –

3

Bạn có thể sử dụng jQuery's not() traversal phải dọn dẹp mới:

$('td').not('.noEdit').click(function() { 
    alert('do the function'); 
}); 
+0

Điều này là khả thi (và có thể) nhanh hơn hai phương pháp trên, vì nó đang sử dụng các phương thức liệt kê của jQuery chứ không phải là bộ điều khiển công cụ chọn sizzle. +1 – karim79

+0

@ karim79: 'not()' không sử dụng Sizzle? Nó thật thú vị! – BoltClock

+0

@Boltclock - Tôi nghĩ rằng đó là trường hợp (nghĩ! = Biết) nhưng tôi quá lười để kiểm tra tại thời điểm cụ thể này :) – karim79

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