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?


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');

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.