340 votes

Pas de sélecteur de classe dans jQuery

Existe-t-il une expression de sélecteur simple pour ne pas sélectionner les éléments ayant 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 récupérer les trois premiers divs et j'ai essayé

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

Mais cela reçoit tout comme le dernier div contient plus que la première barre. Existe-t-il un moyen d'utiliser un caractère de remplacement dans une telle expression ? Quelque chose comme

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

Y a-t-il d'autres sélecteurs qui pourraient vous aider ?

0 votes

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

1 votes

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

659voto

lonesomeday Points 95456

Vous avez besoin de la :not() sélecteur :

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

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

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

107 votes

Notez que, puisque :not() est jusqu'à 2 ou 3 fois plus rapide que .not() ( jsperf.com/jquery-css3-not-vs-not ), il est préférable d'utiliser :not(). Cependant, la documentation de jQuery recommande d'utiliser .not() à la place, car c'est plus lisible ( api.jquery.com/not-selector ). J'espère que cela aidera quelqu'un à prendre une décision entre les deux !

3 votes

@rinogo C'est plus rapide maintenant que la grande majorité des navigateurs supportent querySelectorAll, mais cela n'a pas toujours été le cas.

5 votes

Oui, exactement ! :) J'espère que mon commentaire n'a pas été perçu comme une critique ; j'avais plutôt l'intention de compléter votre question déjà utile.

111voto

Sarfraz Points 168484

Vous pouvez utiliser le :not le sélecteur de filtre :

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

Ou not() méthode :

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

Plus d'informations :

4 votes

En " doit être omise si elle est utilisée comme sélecteur CSS.

22 votes

@BoltClock : C'est nécessaire pour les valeurs contenant des espaces, j'ai pris l'habitude de toujours les spécifier :)

5voto

Nur.B Points 19

Vous pouvez écrire un sélecteur jQuery dans la méthode "not" :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X