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

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

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

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

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

person Ankur    schedule 31.03.2010    source источник


Ответы (6)


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

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

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

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

person rahul    schedule 31.03.2010
comment
Что делать, если вы хотите исключить более одного класса? СПАСИБО - person SoulMagnet; 03.02.2014
comment
Из документации: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a) поэтому просто используйте селекторы с разделителями-запятыми, чтобы сделать несколько (".thisclass:not(#thisid,#thatid)").doAction(); - person Chase; 11.03.2014
comment
работал с одинарными кавычками следующим образом: $(.thisclass:not('#thisid')).doAction(); - person Muhammad Raja; 18.08.2015
comment
или если вы хотите привязаться ко всем дочерним элементам с определенным именем класса, кроме одного, вы можете сделать так: $('.thisclass:not(#id) .otherclass').doAction() - person dalmate; 11.01.2016
comment
что, если у меня есть стандартный код, такой как: $('#some').notimportant, $('#another').dosomethingelse, и я хочу избежать выполнения по определенному идентификатору, заданному динамически? - person Botea Florin; 16.11.2017

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

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

$(".thisClass").not("#thisId").doAction();
person Karl Adler    schedule 21.04.2014
comment
.not() не является селектором. Это функция. Но есть также селектор :not(), как упоминается в других ответах. - person WΩLLE - ˈvɔlə; 29.07.2014

Вы можете использовать функцию .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();
person ScottyG    schedule 21.03.2016

Я просто добавлю ответ 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

person Jayant Bhawal    schedule 21.03.2016

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

Документация по селекторам: http://api.jquery.com/category/selectors/

person Amy B    schedule 31.03.2010
comment
Вы имели в виду $(.thisClass[id!='thisId']).doAction(); ? - person detay; 23.06.2011

Также можно использовать метод .not() с выделением всего элемента.

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

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