jQuery: sélectionnez tous les éléments d'une classe donnée, à l'exception d'un identifiant particulier

146

C'est probablement assez simple.

Je veux sélectionner tous les éléments d'une classe donnée thisClass, sauf là où se trouve l'identifiant thisId.

c'est-à-dire quelque chose d'équivalent à (où - / moins implique supprimer):

$(".thisClass"-"#thisId").doAction();
Ankur
la source

Réponses:

290

Utilisez le sélecteur: not .

$(".thisclass:not(#thisid)").doAction();

Si vous avez plusieurs identifiants ou sélecteurs, utilisez simplement le séparateur virgule, en plus:

(".thisclass:not(#thisid,#thatid)").doAction();

rahul
la source
3
Que faire si vous souhaitez exclure plusieurs classes? THX
SoulMagnet
13
De la documentation: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)utilisez simplement les sélecteurs délimités par des virgules pour faire plusieurs(".thisclass:not(#thisid,#thatid)").doAction();
Chase
a travaillé avec des guillemets simples comme ceci - $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja
ou si vous voulez vous lier à tous les enfants des éléments qui ont un nom de classe spécifique, sauf un, vous pouvez faire comme ceci: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
et si j'ai un code standard comme: $ ('# some'). notimportant, $ ('# another'). dosomethingelse et que je veux éviter l'exécution sur un identifiant spécifique donné dynamiquement?
Botea Florin
29

Ou prenez la méthode .not ()

https://api.jquery.com/not/

$(".thisClass").not("#thisId").doAction();
Karl Adler
la source
3
.not()n'est pas un sélecteur. C'est une fonction. Mais il y a aussi un :not()sélecteur comme d'autres mentions de réponse.
WoIIe
7

Vous pouvez utiliser la fonction .not comme les exemples suivants pour supprimer les éléments qui ont un identifiant exact, un identifiant contenant un mot spécifique, un identifiant commençant par un mot, etc ... voir http://www.w3schools.com/jquery/jquery_ref_selectors .asp pour plus d'informations sur les sélecteurs jQuery.

Ignorer par ID exact:

 $(".thisClass").not('[id="thisId"]').doAction();

Ignorer les ID contenant le mot «Id»

$(".thisClass").not('[id*="Id"]').doAction();

Ignorer les identifiants commençant par "mon"

$(".thisClass").not('[id^="my"]').doAction();
ScottyG
la source
6

Je vais simplement ajouter une réponse JS (ES6), au cas où quelqu'un la chercherait:

Array.from(document.querySelectorAll(".myClass:not(#myId)")).forEach((el,i) => {
    doSomething(el);
}

Mise à jour (cela a peut-être été possible lorsque j'ai publié la réponse originale, mais en l'ajoutant quand même):

document.querySelectorAll(".myClass:not(#myId)").forEach((el,i) => {
    doSomething(el);
});

Cela supprime l' Array.fromutilisation.

document.querySelectorAllrenvoie un NodeList.
Lisez ici pour en savoir plus sur la façon d'itérer dessus (et d'autres choses): https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Jayant Bhawal
la source
2

Utiliser la .not()méthode avec la sélection d'un élément entier est également une option.

Cette méthode peut être utile si vous souhaitez effectuer une autre action directement avec cet élément.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
NiZa
la source