2011-05-29 24 views
37

I cant dường như để có được những hoạt động sau:jQuery - Nhiều bộ chọn trong: not()?

$('input:not([type=radio][type=checkbox])').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 

đã thử một vài của cú pháp khác nhau, bất cứ ai có thể giúp tôi ra về thế này.

Cheers
Charlie

+0

thể trùng lặp của [jQuery - nhiều: không chọn] (http://stackoverflow.com/questions/7144976/jquery-multiple-not-selector) –

Trả lời

67

Bạn đang bối rối các multiple selector với multiple attribute selector. Bạn nên viết:

$("input:not([type=radio], [type=checkbox])"); 

Thuộc tính nhiều selector [type=radio][type=checkbox] phù hợp với các yếu tố có type thuộc tính đều bình đẳng để cảradiocheckbox, mà không thể xảy ra trong vũ trụ này.

+0

Perfect !, nhờ Frédéric. Có vẻ như tôi đã nhầm lẫn những điều đó. Bookmarked :) –

+0

Tôi nghĩ rằng nó sẽ là đúng hơn để nói "không thể xảy ra trong việc thực hiện html" thay vì cố gắng để nói cho toàn bộ vũ trụ. Đó là một vũ trụ lớn *, một số chủng tộc ngoài hành tinh có thể có triển khai html, cho phép danh sách các giá trị được phân cách bằng dấu phẩy cho một thuộc tính nhất định, chẳng hạn. (* Nhiều nhà vũ trụ học tin rằng vũ trụ thực sự là vô hạn, trong trường hợp bất kỳ việc thực hiện html nào bạn có thể nghĩ sẽ tồn tại ở đâu đó) –

3

Cú pháp bên trong not() giống với cú pháp chọn bình thường, vì vậy nếu bạn muốn khớp với những thứ không phải là một trong những thứ đó, bạn sử dụng công cụ chọn không khớp với cả hai (vì về cơ bản bạn đang phủ nhận bộ chọn). Làm thế nào để bạn làm điều đó? Cũng giống như cách bạn áp dụng phong cách cho nhiều bộ chọn cùng một lúc trong CSS, với một dấu phẩy, như vậy:

$('input:not([type=radio],[type=checkbox])') 

Điều đó sẽ chọn tất cả các nguyên liệu đầu vào không [type=radio] và không [type=checkbox]

+3

Lưu ý rằng điều này chỉ áp dụng cho ': not()' của jQuery. CSS3 của ': not()' không thể chấp nhận bất cứ điều gì trừ [chọn đơn giản] (http://www.w3.org/TR/css3-selectors/#simple-selectors-dfn). Như vậy, nếu bạn chuyển bất kỳ thứ gì nhiều hơn một công cụ chọn đơn giản tới ': not()' trong jQuery, các trình duyệt hiện đại không thể phân tích cú pháp bộ chọn với 'querySelectorAll()' để có thể có hiệu năng (nếu có). – BoltClock

+0

Có, cảm ơn vì đã làm rõ, so sánh CSS của tôi không làm rõ rằng CSS3 không chọn _doesn't_ hoạt động theo cách đó. – darkliquid

0

Bạn cũng có thể loại trừ các mặt hàng như thế này :

$('input').not('[type=radio], [type=checkbox]').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
});