jQuery: seleziona tutti gli elementi di una determinata classe, tranne un ID specifico


146

Questo è probabilmente piuttosto semplice.

Voglio selezionare tutti gli elementi di una determinata classe thisClass, tranne dove si trova l'id thisId.

cioè qualcosa di equivalente a (dove - / meno implica rimuovere):

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

Risposte:


290

Utilizzare il selettore: not .

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

Se hai più ID o selettori, usa semplicemente il delimitatore virgola, inoltre:

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


3
Cosa succede se si desidera escludere più di una classe? THX
SoulMagnet,

13
Dalla documentazione: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)quindi basta usare i selettori delimitati da virgole per fare più(".thisclass:not(#thisid,#thatid)").doAction();
Chase

ha lavorato con virgolette singole come questa - $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja,

oppure se vuoi associare tutti i figli di elementi che hanno un nome di classe specifico, tranne uno, puoi fare così: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate

cosa succede se ho un codice standard come: $ ('# some'). non importante, $ ('# altro'). dosomethingelse e voglio evitare l'esecuzione su un ID specifico dato dinamicamente?
Botea Florin,


7

È possibile utilizzare la funzione .not come i seguenti esempi per rimuovere elementi con un ID esatto, un id che contiene una parola specifica, un id che inizia con una parola, ecc ... consultare http://www.w3schools.com/jquery/jquery_ref_selectors .asp per ulteriori informazioni sui selettori jQuery.

Ignora per ID esatto:

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

Ignora ID che contiene la parola "Id"

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

Ignora ID che iniziano con "mio"

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

6

Lancerò una risposta JS (ES6), nel caso qualcuno la stia cercando:

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

Aggiornamento (questo potrebbe essere stato possibile quando ho pubblicato la risposta originale, ma aggiungendola comunque ora):

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

Questo elimina l' Array.fromutilizzo.

document.querySelectorAllrestituisce a NodeList.
Leggi qui per saperne di più su come iterarlo (e altre cose): https://developer.mozilla.org/en-US/docs/Web/API/NodeList



2

Anche l'uso del .not()metodo con la selezione di un intero elemento è un'opzione.

In questo modo potrebbe essere utile se si desidera eseguire direttamente un'altra azione con quell'elemento.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
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.