Не селектор класу в jQuery


270

Чи є простий вираз селектора, щоб не вибрати елементи з певним класом?

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

Я просто хочу отримати перші три діви і спробував

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

Але це отримує все, оскільки останній div містить більше, ніж перший рядок. Чи існує спосіб використання заповнювача в такому виразі? Щось схоже

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

Будь-які інші селектори, які можуть допомогти?


Почертайте попередній коментар, я просто перечитав питання. Критичний клас є first-bar.
BoltClock

Якщо ви хочете вибрати всі елементи, у яких немає ні класу1, ні класу2, з'єднання працювало б:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Відповіді:


543

Вам потрібен :not()селектор:

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

або, альтернативно, .not()спосіб:

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

91
Зауважте, що оскільки: not () в 2-3 рази швидше, ніж .not () ( jsperf.com/jquery-css3-not-vs-not ), можливо, ви захочете використовувати: not (). Однак документи jQuery рекомендують замість цього використовувати .not (), оскільки він є більш читабельним ( api.jquery.com/not-selector ). Сподіваюся, це допоможе комусь прийняти рішення між двома!
rinogo

2
@rinogo Зараз швидше, коли переважна більшість браузерів підтримує querySelectorAll, але це не завжди було так.
самотній день

4
Так, точно! :) Сподіваюся, мій коментар не натрапив на критику; Я швидше мав намір додати до вашого вже корисного питання.
rinogo

1
Дякую!! відключити ключ введення для всіх, крім моїх фільтрувальних коробок. $ ("input: not (.rgFilterBox)"). keydown (функція (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11

3
@Daniel, так, але якщо вона є , то це дуже легко змінити , щоб отримати приріст продуктивності миттєвого :)
rinogo

85

Ви можете використовувати :notперемикач фільтрів:

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

Або not()метод:

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

Більше інформації:


3
"Повинен бути опущений , якщо використовувати його в якості селектора CSS.
BoltClock

17
@BoltClock: Це потрібно для значень з пробілами в них, я зробив свою звичку вказувати ті завжди :)
Сарфраз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.