Pas de sélecteur de classe dans jQuery


272

Existe-t-il une expression de sélection simple pour ne pas sélectionner des éléments avec une classe spécifique?

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

Je veux juste obtenir les trois premiers divs et essayé

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

Mais cela reçoit tout car le dernier div contient plus que la première mesure. Existe-t-il un moyen d'utiliser un espace réservé dans une telle expression? Quelque chose comme ca

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

D'autres sélecteurs peuvent-ils vous aider?


Grattez mon commentaire précédent, je viens de relire la question. La classe critique est first-bar.
BoltClock

Dans le cas où l'on veut sélectionner tous les éléments qui n'ont ni classe1 ni classe2, la concaténation fonctionnerait:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Réponses:


545

Vous avez besoin du :not()sélecteur:

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

ou, alternativement, la .not()méthode:

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

91
Notez que puisque: not () est jusqu'à 2-3 fois plus rapide que .not () ( jsperf.com/jquery-css3-not-vs-not ), vous pouvez utiliser: not (). Cependant, les documents jQuery recommandent d'utiliser .not () à la place, car il est plus lisible ( api.jquery.com/not-selector ). J'espère que cela aide quelqu'un à prendre une décision entre les deux!
rinogo

2
@rinogo Il est plus rapide maintenant que la grande majorité des navigateurs prennent en charge querySelectorAll, mais cela n'a pas toujours été le cas.
lonesomeday

4
Oui, exactement! :) J'espère que mon commentaire n'est pas apparu comme une critique; Je voulais plutôt ajouter à votre question déjà utile.
rinogo

1
Merci!! désactiver la touche entrée sur tous, sauf mes boîtes de filtrage. $ ("input: not (.rgFilterBox)"). keydown (function (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11

3
@ Daniel, oui, mais si elle est , alors il est un super changement facile d'obtenir un gain de performance instantanée :)
rinogo

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.