jQuery: selecciona todos los elementos de una clase dada, excepto un Id en particular

146

Esto es probablemente bastante simple.

Quiero seleccionar todos los elementos de una clase dada thisClass, excepto donde está la identificación thisId.

es decir, algo equivalente a (donde - / menos implica eliminar):

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

Respuestas:

290

Use el selector: no .

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

Si tiene múltiples identificadores o selectores, simplemente use el delimitador de coma, además:

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

rahul
fuente
3
¿Qué sucede si desea excluir más de una clase? THX
SoulMagnet
13
De la documentación: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)así que solo use los selectores delimitados por comas para hacer múltiples(".thisclass:not(#thisid,#thatid)").doAction();
Chase
trabajó con comillas simples como esta: $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja
o si desea enlazar a todos los elementos secundarios que tienen un nombre de clase específico, excepto uno, puede hacer lo siguiente: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
¿Qué pasa si tengo un código estándar como: $ ('# some'). notimportant, $ ('# another'). dosomethingelse y quiero evitar la ejecución sobre una identificación específica dada dinámicamente?
Botea Florin
29

O tome el método .not ()

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

$(".thisClass").not("#thisId").doAction();
Karl Adler
fuente
3
.not()No es un selector. Es una funcion. Pero también hay un :not()selector como otras menciones de respuesta.
El
7

Puede usar la función .not como en los siguientes ejemplos para eliminar elementos que tengan una identificación exacta, una identificación que contenga una palabra específica, una identificación que comience con una palabra, etc ... consulte http://www.w3schools.com/jquery/jquery_ref_selectors .asp para obtener más información sobre los selectores jQuery.

Ignorar por ID exacto:

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

Ignorar las identificaciones que contienen la palabra "Id"

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

Ignorar las identificaciones que comienzan con "mi"

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

Solo agregaré una respuesta JS (ES6), en caso de que alguien la esté buscando:

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

Actualización (esto puede haber sido posible cuando publiqué la respuesta original, pero agregando esto ahora de todos modos):

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

Esto elimina el Array.fromuso.

document.querySelectorAlldevuelve a NodeList.
Lea aquí para saber más sobre cómo iterar sobre él (y otras cosas): https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Jayant Bhawal
fuente
2

Usar el .not()método con la selección de un elemento completo también es una opción.

De esta manera, podría ser útil si desea realizar otra acción con ese elemento directamente.

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