Zastanawiam się, czy w jQuery można wybierać elementy według nazwanych atrybutów za pomocą AND i OR.
Przykład:
<div myid="1" myc="blue">1</div>
<div myid="2" myc="blue">2</div>
<div myid="3" myc="blue">3</div>
<div myid="4">4</div>
Chciałbym zaznaczyć wszystkie elementy, myc="blue"
ale tylko te z myid
ustawieniem 1 lub 3.
Więc spróbowałem:
a=$('[myc="blue"] [myid="1"] [myid="3"]');
ale to nie działa, to samo tutaj:
a=$('[myc="blue"] && [myid="1"] || [myid="3"]');
Czy jest to możliwe bez pisania specjalnych funkcji filtrujących?
myc
imyid
. Jeśli używasz HTML5, przedrostek ich zdata-
:data-myc
idata-myid
.Odpowiedzi:
AND operacja
Operacja LUB , użyj przecinków
Jak skomentował @Vega:
źródło
myc == blue && (id == 1 || id == 3)
a=$('[myc="blue"] [myid="1"],[myid="3"]');
, to znaczy,([myc="blue"] AND [myid="1"]) OR [myid="3"]
czy([myc="blue"]) AND ([myid="1"] OR [myid="3"])
szukam drugiego // Edytuj: dziękuję za tę aktualizację! :-)Proste użycie
.filter()
[dokumenty] (ORAZ) za pomocą selektora wielokrotnego [dokumenty] (LUB):Ogólnie rzecz biorąc, selektory łańcuchowe, takie jak
a.foo.bar[attr=value]
to jest pewnego rodzaju selektor AND.jQuery ma obszerną dokumentację na temat obsługiwanych selektorów, warto ją przeczytać.
źródło
Co powiesz na napisanie filtra takiego jak poniżej,
Edycja: @Jack Dzięki .. całkowicie to przegapiłem ..
PRÓBNY
źródło
Operator and w selektorze to po prostu pusty ciąg, a operator lub to przecinek.
Nie ma jednak grupowania ani priorytetu, więc musisz powtórzyć jeden z warunków:
źródło
blue
, ale nie byłem pewien co do wartości liczbowych, więc je zachowałem.Najpierw znajdź warunek występujący we wszystkich sytuacjach, a następnie odfiltruj warunki specjalne:
źródło
W twoim szczególnym przypadku tak będzie
źródło
JQuery używa selektorów CSS do wybierania elementów, więc wystarczy użyć więcej niż jednej reguły, oddzielając je przecinkami, tak jak:
Edytować:
Przepraszamy, chciałeś koloru niebieskiego i 1 lub 3. A co z:
Połączenie dwóch selektorów atrybutów daje ORAZ, a przecinek - LUB.
źródło
myc == blue && (id == 1 || id == 3)
[myc="blue"]
selektor w drugim przykładzie.Aby prawidłowo wybrać elementy za pomocą operacji logicznych, które zostały powiedziane, wystarczy
jQuery.filter()
doAND
pracy, a nie „funkcje specjalne filtry”. Potrzebujesz równieżjQuery.add()
doOR
operacji.Alternatywnie można to osiągnąć używając skrótu w pojedynczym selektorze, gdzie zagłuszanie selektorów razem działa jak
AND
znak, a oddzielenie przecinkiem działa jakOR
:źródło