Bukan pemilih kelas di jQuery

271

Apakah ada ekspresi pemilih sederhana untuk tidak memilih elemen dengan kelas tertentu?

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />

Saya hanya ingin mendapatkan tiga div pertama dan mencoba

$(div[class^="first-"][class!="first-bar"])

Tapi ini menerima semua karena div terakhir berisi lebih dari bar pertama. Apakah ada cara untuk menggunakan placeholder dalam ungkapan seperti itu? Sesuatu seperti itu

$(div[class^="first-"][class!="first-bar*"]) // doesn't seem to work

Adakah penyeleksi lain yang dapat membantu?

Zardoz
sumber
Gores komentar saya sebelumnya, saya hanya membaca ulang pertanyaannya. Kelas kritis adalah first-bar.
BoltClock
Jika seseorang ingin memilih semua elemen yang tidak memiliki class1 atau class2, penggabungan akan bekerja:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Jawaban:

544

Anda membutuhkan :not()pemilih:

$('div[class^="first-"]:not(.first-bar)')

atau, sebagai alternatif, .not()metode:

$('div[class^="first-"]').not('.first-bar');
lonesomeday
sumber
91
Perhatikan bahwa karena: not () hingga 2-3 kali lebih cepat daripada .not () ( jsperf.com/jquery-css3-not-vs-not ), Anda mungkin ingin menggunakan: not (). Namun, dokumen jQuery merekomendasikan penggunaan .not () sebagai gantinya, karena lebih mudah dibaca ( api.jquery.com/not-selector ). Semoga ini bisa membantu seseorang membuat keputusan di antara keduanya!
rinogo
2
@rinogo Sekarang lebih cepat karena sebagian besar browser mendukung querySelectorAll, tapi itu tidak selalu menjadi masalah.
lonesomeday
4
Yup, tepatnya! :) Saya harap komentar saya tidak muncul sebagai kritik; Saya lebih suka menambahkan pertanyaan Anda yang sudah membantu.
rinogo
1
Terima kasih!! nonaktifkan tombol enter pada semua kecuali Kotak Penyaringan saya. $ ("input: not (.rgFilterBox)"). keydown (fungsi (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11
3
@ Daniel, ya, tapi jika itu adalah , maka itu adalah perubahan mudah super untuk mendapatkan kinerja instan meningkatkan :)
rinogo
85

Anda dapat menggunakan :notpemilih filter:

$('foo:not(".someClass")')

Atau not()metode:

$('foo').not(".someClass")

Info lebih lanjut:

Sarfraz
sumber
3
The "harus dihilangkan jika menggunakannya sebagai pemilih CSS.
BoltClock
17
@BoltClock: Diperlukan untuk nilai-nilai dengan spasi di dalamnya, saya telah membuatnya menjadi kebiasaan saya untuk menentukan yang selalu :)
Sarfraz