jQuery: выбрать все элементы данного класса, кроме определенного идентификатора

146

Это, наверное, довольно просто.

Я хочу выбрать все элементы данного класса thisClass, кроме идентификатора thisId.

то есть что-то эквивалентное (где - / минус подразумевает удаление):

$(".thisClass"-"#thisId").doAction();
Анкур
источник

Ответы:

290

Используйте : не селектор .

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

Если у вас несколько идентификаторов или селекторов, просто используйте разделитель запятой, кроме того:

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

Рахул
источник
3
Что если вы хотите исключить более одного занятия? THX
SoulMagnet
13
Из документации: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)так что просто используйте селекторы, разделенные запятыми, чтобы сделать несколько(".thisclass:not(#thisid,#thatid)").doAction();
Chase
работал с одинарными кавычками, как это - $ (". thisclass: not ('# thisid')"). doAction ();
Мухаммед Раджа
или если вы хотите связать все дочерние элементы с определенным именем класса, кроме одного, вы можете сделать это следующим образом: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate
Что делать, если у меня есть стандартный код, такой как: $ ('# some'). notimportant, $ ('# another'). dosomethingelse, и я хочу избежать выполнения определенного динамического идентификатора?
Ботея Флорин
29

Или возьмите метод .not ()

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

$(".thisClass").not("#thisId").doAction();
Карл Адлер
источник
3
.not()не селектор Это функция. Но есть и :not()селектор, как и в других ответах.
WoII
7

Вы можете использовать функцию .not, как в следующих примерах, чтобы удалить элементы с точным идентификатором, идентификатором, содержащим определенное слово, идентификатором, начинающимся со слова, и т. Д ... см. Http://www.w3schools.com/jquery/jquery_ref_selectors .asp для получения дополнительной информации о селекторах jQuery.

Игнорировать по точному идентификатору:

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

Игнорировать идентификаторы, содержащие слово «Id»

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

Игнорировать идентификаторы, которые начинаются с "мой"

$(".thisClass").not('[id^="my"]').doAction();
ScottyG
источник
6

Я просто добавлю ответ JS (ES6) на тот случай, если его кто-то ищет:

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

Обновление (это могло быть возможно, когда я опубликовал исходный ответ, но в любом случае добавил это):

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

Это избавляет от Array.fromиспользования.

document.querySelectorAllвозвращает NodeList.
Прочитайте здесь, чтобы узнать больше о том, как выполнять итерации (и другие вещи): https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Джаянт Бхавал
источник
2

Использование .not()метода с выбором всего элемента также является опцией.

Этот способ может быть полезен, если вы хотите выполнить другое действие непосредственно с этим элементом.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
Низа
источник