jQuery: chọn tất cả các thành phần của một lớp nhất định, ngoại trừ một Id cụ thể


146

Điều này có lẽ khá đơn giản.

Tôi muốn chọn tất cả các phần tử của một lớp nhất định thisClass, ngoại trừ vị trí của id thisId.

tức là một cái gì đó tương đương với (trong đó - / trừ hàm ý loại bỏ):

$(".thisClass"-"#thisId").doAction();

Câu trả lời:


290

Sử dụng : không chọn .

$(".thisclass:not(#thisid)").doAction();

Nếu bạn có nhiều id hoặc bộ chọn, chỉ cần sử dụng dấu phân cách dấu phẩy, ngoài ra:

(".thisclass:not(#thisid,#thatid)").doAction();


3
Điều gì nếu bạn muốn loại trừ nhiều hơn một lớp? THX
SoulMagnet

13
Từ tài liệu: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)vì vậy chỉ cần sử dụng các bộ chọn được phân tách bằng dấu phẩy để thực hiện nhiều(".thisclass:not(#thisid,#thatid)").doAction();
Truy đuổi

đã làm việc với các trích dẫn đơn như thế này - $ (". this class: not ('# thisid')"). doAction ();
Muhammad Raja

hoặc nếu bạn muốn liên kết với tất cả các phần tử con có tên lớp cụ thể, ngoại trừ một phần tử, bạn có thể thực hiện như thế này: $ ('. this class: not (#id) .ther class'). doAction ()
dalmate

Điều gì xảy ra nếu tôi có một mã tiêu chuẩn như: $ ('# some'). không quan trọng, $ ('# khác'). dos somebodyelse và tôi muốn tránh thực thi một id cụ thể được cung cấp động?
Botea Florin

29

Hoặc dùng phương thức .not ()

https://api.jquery.com/not/

$(".thisClass").not("#thisId").doAction();

3
.not()không phải là một bộ chọn. Đó là một chức năng. Nhưng cũng có :not()bộ chọn như đề cập câu trả lời khác.
WoIIe

7

Bạn có thể sử dụng hàm .not như các ví dụ sau để xóa các mục có id chính xác, id chứa một từ cụ thể, id bắt đầu bằng một từ, v.v ... xem http://www.w3schools.com/jquery/jquery_Vf_selector .asp để biết thêm thông tin về bộ chọn jQuery.

Bỏ qua bởi ID chính xác:

 $(".thisClass").not('[id="thisId"]').doAction();

Bỏ qua ID có chứa từ "Id"

$(".thisClass").not('[id*="Id"]').doAction();

Bỏ qua ID bắt đầu bằng "của tôi"

$(".thisClass").not('[id^="my"]').doAction();

6

Tôi sẽ chỉ đưa ra câu trả lời của JS (ES6), trong trường hợp ai đó đang tìm kiếm nó:

Array.from(document.querySelectorAll(".myClass:not(#myId)")).forEach((el,i) => {
    doSomething(el);
}

Cập nhật (điều này có thể đã có thể khi tôi đăng câu trả lời ban đầu, nhưng dù sao hãy thêm nó ngay bây giờ):

document.querySelectorAll(".myClass:not(#myId)").forEach((el,i) => {
    doSomething(el);
});

Điều này được loại bỏ việc Array.fromsử dụng.

document.querySelectorAlltrả về a NodeList.
Đọc ở đây để biết thêm về cách lặp lại trên đó (và những thứ khác): https://developer.mozilla.org/en-US/docs/Web/API/NodeList



2

Sử dụng .not()phương pháp với việc chọn toàn bộ phần tử cũng là một tùy chọn.

Cách này có thể hữu ích nếu bạn muốn thực hiện một hành động khác với phần tử đó trực tiếp.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.