jQuery: selecione todos os elementos de uma determinada classe, exceto um ID específico

146

Provavelmente isso é bem simples.

Eu quero selecionar todos os elementos de uma determinada classe thisClass, exceto onde está o ID thisId.

ou seja, algo equivalente a (onde - / menos implica remover):

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

Respostas:

290

Use o seletor: not .

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

Se você tiver vários IDs ou seletores, use o delimitador de vírgula. Além disso:

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

rahul
fonte
3
E se você quiser excluir mais de uma classe? THX
SoulMagnet 03/02
13
A partir da documentação: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)então é só usar os seletores delimitados por vírgula para fazer múltipla(".thisclass:not(#thisid,#thatid)").doAction();
Perseguição
trabalhou com aspas simples como esta - $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja
ou se você desejar vincular a todos os filhos de elementos que possuam um nome de classe específico, exceto um, poderá fazer o seguinte: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
e se eu tiver um código padrão como: $ ('# some'). notimportant, $ ('# another'). dosomethingelse e quiser evitar a execução de um ID específico fornecido dinamicamente?
Botea Florin
29

Ou use o método .not ()

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

$(".thisClass").not("#thisId").doAction();
Karl Adler
fonte
3
.not()não é um seletor. É uma função. Mas também há :not()seletor como outras respostas mencionadas.
29414
7

Você pode usar a função .not como os exemplos a seguir para remover itens com um ID exato, um ID contendo uma palavra específica, um ID começando com uma palavra, etc ... consulte http://www.w3schools.com/jquery/jquery_ref_selectors .asp para obter mais informações sobre os seletores jQuery.

Ignorar por ID exato:

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

Ignore IDs que contenham a palavra "Id"

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

Ignore os IDs que começam com "meu"

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

Vou apenas dar uma resposta JS (ES6), caso alguém a esteja procurando:

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

Atualização (isso pode ter sido possível quando eu postei a resposta original, mas a adicionei agora mesmo assim):

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

Isso se livra do Array.fromuso.

document.querySelectorAllretorna a NodeList.
Leia aqui para saber mais sobre como iterar (e outras coisas): https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Jayant Bhawal
fonte
2

Usar o .not()método para selecionar um elemento inteiro também é uma opção.

Dessa forma, pode ser útil se você quiser executar outra ação diretamente com esse elemento.

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