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();
Ankur
źródło

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();

rahul
źródło
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
29

Lub skorzystaj z metody .not ()

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

$(".thisClass").not("#thisId").doAction();
Karl Adler
źródło
3
.not()nie jest selektorem. To funkcja. Ale jest też :not()selektor, jak inne wzmianki w odpowiedzi.
WoIIe
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();
ScottyG
źródło
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

Jayant Bhawal
źródło
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();
NiZa
źródło