Nie jest selektorem klasy w jQuery


270

Czy istnieje proste wyrażenie selektora, aby nie wybierać elementów o określonej klasie?

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

Chcę tylko zdobyć pierwsze trzy divy i spróbować

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

Ale otrzymuje to wszystko, ponieważ ostatni div zawiera więcej niż pierwszy takt. Czy istnieje sposób użycia symbolu zastępczego w takim wyrażeniu? Coś w tym stylu

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

Jakieś inne selektory, które mogą pomóc?


Podrap mój wcześniejszy komentarz, po prostu ponownie przeczytam pytanie. Klasa krytyczna to first-bar.
BoltClock

W przypadku, gdy chcemy wybrać wszystkie elementy, które nie mają ani klasy 1, ani klasy 2, konkatenacja działałaby:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Odpowiedzi:


543

Potrzebujesz :not()selektora:

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

lub alternatywnie .not()metoda:

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

91
Zauważ, że ponieważ: not () jest do 2-3 razy szybszy niż .not () ( jsperf.com/jquery-css3-not-vs-not ), możesz użyć: not (). Jednak dokumenty jQuery zalecają użycie zamiast tego .not (), ponieważ jest bardziej czytelny ( api.jquery.com/not-selector ). Mam nadzieję, że to pomoże komuś podjąć decyzję między nimi!
rinogo

2
@rinogo Teraz jest szybsze, że zdecydowana większość przeglądarek obsługuje querySelectorAll, ale nie zawsze tak było.
lonesomeday

4
Tak, dokładnie! :) Mam nadzieję, że mój komentarz nie był krytyką; Raczej chciałbym dodać do twojego już pomocnego pytania.
rinogo

1
Dzięki!! wyłącz klawisz Enter na wszystkich polach oprócz moich filtrów. $ ("input: not (.rgFilterBox)"). keydown (function (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11,

3
@Daniel, tak, ale jeśli jest , to jest to bardzo łatwo zmienić, aby uzyskać natychmiastowy wzrost wydajności :)
rinogo

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.