Zastanawiam się, czy istnieje sposób na logikę „LUB” w selektorach jQuery. Na przykład wiem, że element jest potomkiem elementu z klasą classA lub classB i chcę zrobić coś takiego elem.parents('.classA or .classB')
. Czy jQuery zapewnia taką funkcjonalność?
jquery
jquery-selectors
Suan
źródło
źródło
AND
byłoby.classA.classB
.Używanie przecinka może nie być wystarczające, jeśli masz wiele obiektów jQuery, które muszą zostać połączone.
Metoda .add () dodaje wybrane elementy do zestawu wyników:
Jest bardziej szczegółowy
'.classA, .classB'
, ale pozwala budować bardziej złożone selektory, takie jak:źródło
Napisałem niesamowicie prostą (5 linii kodu) wtyczkę do tej właśnie funkcji:
http://byrichardpowell.github.com/jquery-or/
Pozwala skutecznie powiedzieć „pobierz ten element lub jeśli ten element nie istnieje, użyj tego elementu”. Na przykład:
Chociaż zaakceptowana odpowiedź zapewnia podobną funkcjonalność, jeśli istnieją oba selektory (przed i po przecinku), oba selektory zostaną zwrócone.
Mam nadzieję, że okaże się pomocny dla każdego, kto może wylądować na tej stronie za pośrednictwem Google.
źródło
"a" || "b"
vs.null || "b"
w waniliowym JS. Jeśli zastosujemy to samo zachowanie tutaj,$(a).or(b)
powinien zwrócić,$(a)
jeśli istnieje, w przeciwnym razie powinien wrócić$(b)
. Nie sądzę, żeby było coś złego w tej nomenklaturze, ponieważ „lub” pasuje do zachowania JS „||” (lub) operator.or
. To, o czym mówią inni, przypomina bardziej akcjęconcat
lubmerge
akcję.Jeśli chcesz użyć standardowej konstrukcji elementu = element1 || element2, w którym JavaScript zwróci pierwszy, który jest prawdziwy, możesz zrobić dokładnie to:
co zwróciłoby pierwszy znaleziony element. Ale lepszym sposobem byłoby prawdopodobnie użycie konstrukcji przecinka selektora jQuery (która zwraca tablicę znalezionych elementów) w następujący sposób:
który zwróci pierwszy znaleziony element.
Używam tego od czasu do czasu, aby znaleźć element aktywny na liście lub jakiś element domyślny, jeśli nie ma elementu aktywnego. Na przykład:
który zwróci dowolne li z klasą aktywnych lub, jeśli nie będzie, po prostu zwróci ostatnie li.
Albo zadziała. Istnieją jednak potencjalne kary za wyniki, ponieważ || przestanie przetwarzać, gdy tylko znajdzie coś prawdziwego, podczas gdy podejście tablicowe spróbuje znaleźć wszystkie elementy, nawet jeśli już je znalazł. Z drugiej strony, używając || konstrukcja może potencjalnie mieć problemy z wydajnością, jeśli będzie musiała przejść przez kilka selektorów przed znalezieniem tego, który zwróci, ponieważ musi wywołać główny obiekt jQuery dla każdego (naprawdę nie wiem, czy jest to wzrost wydajności, czy nie, wydaje się to logiczne, że tak może być). Ogólnie jednak używam podejścia tablicowego, gdy selektor jest raczej długim ciągiem.
źródło
Wreszcie znalazłem hacka, jak to zrobić:
(wybiera div z klasą
classA
ORclassB
z bezpośrednim rozpiętością potomną)źródło
Daniel A. White Solution świetnie sprawdza się na zajęciach.
Mam sytuację, w której musiałem znaleźć pola wejściowe, takie jak donee_1_card, gdzie 1 to indeks.
Moje rozwiązanie zostało
Chociaż nie jestem pewien, jak optymalne jest.
źródło