jQuery: pilih semua elemen dari kelas yang diberikan, kecuali untuk Id tertentu

146

Ini mungkin cukup sederhana.

Saya ingin memilih semua elemen dari kelas yang diberikan thisClass, kecuali di mana id berada thisId.

yaitu sesuatu yang setara dengan (di mana - / minus berarti hapus):

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

Jawaban:

290

Gunakan : bukan pemilih .

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

Jika Anda memiliki beberapa id atau pemilih, gunakan pembatas koma, sebagai tambahan:

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

rahul
sumber
3
Bagaimana jika Anda ingin mengecualikan lebih dari satu kelas? THX
SoulMagnet
13
Dari dokumentasi: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)jadi gunakan saja penyeleksi dibatasi koma untuk melakukan banyak(".thisclass:not(#thisid,#thatid)").doAction();
Chase
bekerja dengan tanda kutip tunggal seperti ini - $ (".classclass ini: tidak ('# thisid')"). doAction ();
Muhammad Raja
atau jika Anda ingin mengikat semua elemen yang memiliki nama kelas tertentu, kecuali satu, Anda dapat melakukan seperti ini: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
bagaimana jika saya memiliki kode standar seperti: $ ('# some'). notimportant, $ ('# another'). dosomethingelse dan saya ingin menghindari eksekusi atas id tertentu yang diberikan secara dinamis?
Botea Florin
29

Atau gunakan metode .not ()

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

$(".thisClass").not("#thisId").doAction();
Karl Adler
sumber
3
.not()bukan pemilih. Itu sebuah fungsi. Namun ada juga :not()pemilih seperti jawaban lain yang menyebutkan.
WoIIe
7

Anda dapat menggunakan fungsi .not seperti contoh berikut untuk menghapus item yang memiliki id yang tepat, id yang mengandung kata tertentu, id yang dimulai dengan kata, dll ... lihat http://www.w3schools.com/jquery/jquery/jquery_ref_selectors .megang informasi lebih lanjut tentang pemilih jQuery.

Abaikan oleh Exact ID:

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

Abaikan ID yang berisi kata "Id"

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

Abaikan ID yang dimulai dengan "saya"

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

Saya hanya akan memberikan jawaban JS (ES6), kalau-kalau ada orang yang mencarinya:

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

Pembaruan (ini mungkin terjadi ketika saya memposting jawaban asli, tetapi tetap menambahkan ini sekarang):

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

Ini menghilangkan Array.frompenggunaan.

document.querySelectorAllmengembalikan a NodeList.
Baca di sini untuk mengetahui lebih lanjut tentang cara mengulanginya (dan hal-hal lain): https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Jayant Bhawal
sumber
2

Menggunakan .not()metode dengan memilih seluruh elemen juga merupakan opsi.

Cara ini bisa berguna jika Anda ingin melakukan tindakan lain dengan elemen itu secara langsung.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
NiZa
sumber