Selettore di classe non in jQuery


271

Esiste una semplice espressione di selezione per non selezionare elementi con una classe specifica?

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

Voglio solo ottenere i primi tre div e provare

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

Ma questo riceve tutto poiché l'ultimo div contiene più della prima barra. C'è un modo per usare un segnaposto in una tale espressione? Qualcosa del genere

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

Altri selettori che potrebbero essere d'aiuto?


Gratta il mio commento precedente, ho appena riletto la domanda. La classe critica è first-bar.
BoltClock

Nel caso in cui si desideri selezionare tutti gli elementi che non hanno né class1 né class2, la concatenazione funzionerebbe:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Risposte:


544

È necessario il :not()selettore:

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

o, in alternativa, il .not()metodo:

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

91
Nota che poiché: not () è fino a 2-3 volte più veloce di .not () ( jsperf.com/jquery-css3-not-vs-not ), potresti voler usare: not (). Tuttavia, i documenti jQuery consigliano invece di utilizzare .not (), poiché è più leggibile ( api.jquery.com/not-selector ). Spero che questo aiuti qualcuno a prendere una decisione tra i due!
Rinogo,

2
@rinogo Ora è più veloce che la stragrande maggioranza dei browser supporta querySelectorAll, ma non è sempre stato così.
Lonesomeday,

4
Sì, esattamente! :) Spero che il mio commento non sia stato criticato; Volevo piuttosto aggiungere alla tua domanda già utile.
Rinogo,

1
Grazie!! disabilita il tasto invio su tutti tranne i miei filtri. $ ("input: not (.rgFilterBox)"). keydown (function (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11

3
@Daniel, sì, ma se lo è , allora è un cambiamento semplicissimo per ottenere un aumento delle prestazioni istantaneo :)
rinogo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.