2009-03-02 36 views
19

Cố gắng lắp ráp một bộ chọn jQuery khá phức tạp ở đây và gặp sự cố.Câu hỏi chọn jQuery. Chọn tất cả các nút KHÔNG BẮT ĐẦU bằng (chuỗi)

Về cơ bản, tôi đang cố gắng để lấy tất cả neo rằng 1) không có một "rel" của "facebox", HOẶC 2) không có một "href" bắt đầu bằng "mailto ".

Đây là những gì tôi đã cố gắng để làm:

$('a[rel!=facebox], a[href!^="mailto"]') 

biến thể nhỏ này dường như không làm việc. Có cách nào tốt hơn để thực hiện việc này không?

Những selectors có vẻ làm việc cá nhân, nhưng không phải khi ngồi liên tục trong bộ chọn giống nhau:

$('a:not([rel=facebox]), a:not([href^=mailto])') 

giải pháp cuối cùng: Chúng tôi có một người chiến thắng!

$('a:not([rel=facebox],[href^=mailto])') 
+0

Thật kỳ lạ, $ ('a: not ([rel = facebox]') và $ ('a: not ([href^= mailto]') hoạt động tốt, nhưng không được phân tách bằng dấu phẩy –

+0

dấu phẩy thêm đối tượng sau nó vào đối tượng jQuery, thực hiện việc chọn tất cả các nút e có cả rel = facebox và href với mailto. – svinto

Trả lời

48

Bạn muốn EDIT :not selector

$("a:not([rel=facebox],[href^=mailto])"); 

: Tôi đã đánh cắp câu trả lời của bạn cho đúng đắn

+0

Hiện tại, chúng tôi đi ngay bây giờ, tôi cảm thấy tốt hơn khi chọn nó làm câu trả lời được chấp nhận. Bạn đã đúng về: không chọn ban đầu, nhưng tôi đã không nói đúng câu hỏi của tôi. –

+0

Câu hỏi về câu trả lời này: Tại sao^= cần thiết? Điều đó không có nghĩa là "không bằng" trong khi bạn đã viết ": không?" – user1477388

+4

^= có nghĩa là 'bắt đầu bằng' –

3

Được rồi ông Jeremy Ricketts. Jquery đã làm rối tung đầu của bạn. Bạn đang cố gắng để chuỗi chọn logic ... loại giống như cách các phương pháp chuỗi jQuery. Trong bộ chọn thứ hai của bạn (a[href!^="mailto"]), bạn đang cố gắng nói ... KHÔNG những thứ có chứa thuộc tính này. Những gì bạn đang nói là "Tìm kiếm tất cả những thứ không phải là mailto" và "Tìm kiếm tất cả những thứ có chứa mailto". Nó giống như bộ lọc ánh sáng ... nếu bạn lọc ánh sáng màu đỏ ... và ném một bộ lọc ánh sáng màu vàng lên trên ... bạn không lọc ánh sáng màu da cam ... bạn vừa lọc ra mọi thứ (xin lỗi vì độ tương tự) . Vì vậy, những gì bạn đang cố gắng làm là sử dụng bộ chọn giả: không.

Như thế này - $(a:not([href^=mailto:])).whateverJqueryMethodYouWant();

EDIT: Vâng bây giờ mà bạn đã spec'd ra những câu hỏi đúng ... bạn có thể làm điều đó như thế này - $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();

0

Không nên đó là:

$("a:not([rel='facebox'],[href^='mailto'])"); 
Các vấn đề liên quan