jQuery: виберіть усі елементи даного класу, крім конкретного Id


146

Це, мабуть, досить просто.

Я хочу вибрати всі елементи даного класу thisClass, за винятком того, де є id 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'). неважливо, $ ('# інший'). dosomethingelse, і я хочу уникати виконання над певним ідентифікатором, заданим динамічно?
Botea Florin


7

Ви можете використовувати функцію .not, як у наведених нижче прикладах, для видалення елементів, які мають точний ідентифікатор, id, що містить певне слово, id, що починається зі слова тощо, див. 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();

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повертає a NodeList.
Прочитайте тут, щоб дізнатися більше про те, як повторити його (та інші речі): https://developer.mozilla.org/en-US/docs/Web/API/NodeList



2

Використання .not() методу з вибором цілого елемента також є варіантом.

Цей спосіб може бути корисним, якщо ви хочете зробити ще одну дію безпосередньо з цим елементом.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.