jQuery: wybierz wszystkie elementy danej klasy, z wyjątkiem określonego Id


146

To prawdopodobnie całkiem proste.

Chcę wybrać wszystkie elementy danej klasy thisClass, z wyjątkiem miejsca, w którym znajduje się identyfikator thisId.

tj. coś równoważnego (gdzie - / minus oznacza usunięcie):

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

Odpowiedzi:


290

Użyj : nie selektora .

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

Jeśli masz wiele identyfikatorów lub selektorów, po prostu użyj separatora przecinka, a ponadto:

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


3
A co, jeśli chcesz wykluczyć więcej niż jedną klasę? THX
SoulMagnet

13
Z dokumentacji: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)po prostu użyj selektorów rozdzielanych przecinkami, aby zrobić wiele(".thisclass:not(#thisid,#thatid)").doAction();
Chase

pracował z pojedynczymi cudzysłowami takimi jak ten - $ (". thisclass: not ('# thisid')"). doAction ();
Muhammad Raja

lub jeśli chcesz powiązać wszystkie elementy potomne elementów, które mają określoną nazwę klasy, z wyjątkiem jednej, możesz zrobić to w następujący sposób: $ ('. thisclass: not (#id) .otherclass'). doAction ()
dalmate

co jeśli mam standardowy kod, taki jak: $ ('# some'). notimportant, $ ('# another'). dosomethingelse i chcę uniknąć wykonywania na określonym identyfikatorze podanym dynamicznie?
Botea Florin


7

Możesz użyć funkcji .not jak w poniższych przykładach, aby usunąć elementy, które mają dokładny identyfikator, identyfikator zawierający określone słowo, identyfikator zaczynający się od słowa itp. Patrz http://www.w3schools.com/jquery/jquery_ref_selectors .asp, aby uzyskać więcej informacji na temat selektorów jQuery.

Ignoruj ​​według dokładnego identyfikatora:

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

Ignoruj ​​identyfikatory zawierające słowo „Id”

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

Ignoruj ​​identyfikatory zaczynające się od „my”

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

6

Po prostu dorzucę odpowiedź JS (ES6), na wypadek gdyby ktoś jej szukał:

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

Aktualizacja (mogło to być możliwe, kiedy zamieściłem oryginalną odpowiedź, ale i tak dodam ją teraz):

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

To pozbywa się Array.fromużycia.

document.querySelectorAllzwraca a NodeList.
Przeczytaj tutaj, aby dowiedzieć się więcej o tym, jak go iterować (i inne rzeczy): https://developer.mozilla.org/en-US/docs/Web/API/NodeList



2

Korzystanie z .not()metody z zaznaczeniem całego elementu jest również opcją.

Ten sposób może być przydatny, jeśli chcesz bezpośrednio wykonać inną akcję z tym elementem.

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.