jQuery: Wählen Sie alle Elemente einer bestimmten Klasse mit Ausnahme einer bestimmten ID aus

146

Das ist wahrscheinlich ziemlich einfach.

Ich möchte alle Elemente einer bestimmten Klasse auswählen thisClass, außer wo sich die ID befindet thisId.

dh etwas Äquivalentes zu (wobei - / minus das Entfernen impliziert):

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

Antworten:

290

Verwenden Sie den Selektor: not .

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

Wenn Sie mehrere IDs oder Selektoren haben, verwenden Sie einfach das Komma-Trennzeichen.

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

rahul
quelle
3
Was ist, wenn Sie mehr als eine Klasse ausschließen möchten? THX
SoulMagnet
13
Aus der Dokumentation: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)Verwenden Sie also einfach die durch Kommas getrennten Selektoren, um mehrere (".thisclass:not(#thisid,#thatid)").doAction();
auszuführen
arbeitete mit einfachen Anführungszeichen wie diesem - $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja
oder wenn Sie an alle untergeordneten Elemente binden möchten, die einen bestimmten Klassennamen haben, mit Ausnahme eines, können Sie Folgendes tun: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
Was ist, wenn ich einen Standardcode habe wie: $ ('# some'). notimportant, $ ('# some'). dosomethingelse und ich möchte die Ausführung über eine bestimmte ID vermeiden, die dynamisch angegeben wird?
Botea Florin
29

Oder nehmen Sie die Methode .not ()

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

$(".thisClass").not("#thisId").doAction();
Karl Adler
quelle
3
.not()ist kein Selektor. Es ist eine Funktion. Es gibt aber auch :not()Selektoren wie andere Erwähnungen.
WoIIe
7

Sie können die .not- Funktion wie in den folgenden Beispielen verwenden, um Elemente mit einer genauen ID, einer ID, die ein bestimmtes Wort enthält, einer ID, die mit einem Wort beginnt, usw. zu entfernen. Siehe http://www.w3schools.com/jquery/jquery_ref_selectors Weitere Informationen zu jQuery-Selektoren finden Sie unter .asp .

Nach genauer ID ignorieren:

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

IDs ignorieren, die das Wort "Id" enthalten

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

IDs ignorieren, die mit "my" beginnen

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

Ich werde nur eine JS (ES6) Antwort einwerfen, falls jemand danach sucht:

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

Update (dies war möglicherweise möglich, als ich die ursprüngliche Antwort gepostet habe, füge diese aber trotzdem hinzu):

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

Dadurch wird die Array.fromVerwendung beseitigt.

document.querySelectorAllgibt a zurück NodeList.
Lesen Sie hier, um mehr darüber zu erfahren, wie Sie darauf (und auf andere Weise) iterieren können: https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Jayant Bhawal
quelle
2

Die Verwendung der .not()Methode zur Auswahl eines gesamten Elements ist ebenfalls eine Option.

Diese Methode kann nützlich sein, wenn Sie eine andere Aktion direkt mit diesem Element ausführen möchten.

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