jQuery czy Selektor?
Zastanawiam się czy w selektorach jQuery można mieć logikę" lub". Na przykład, Wiem, że element jest albo potomkiem elementu z klasą classA lub classB, i chcę zrobić coś w stylu elem.parents('.classA or .classB')
. Czy jQuery zapewnia taką funkcjonalność?
5 answers
Użyj przecinka.
'.classA, .classB'
Możesz pominąć spację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 07:47:10
Użycie przecinka może nie być wystarczające, jeśli masz wiele obiektów jQuery, które muszą być połączone.
.metoda add() dodaje wybrane elementy do zbioru wynikowego:
// classA OR classB
jQuery('.classA').add('.classB');
Jest bardziej wyrazisty niż '.classA, .classB'
, ale pozwala na budowanie bardziej złożonych selektorów, takich jak:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-20 15:14:31
Napisałem niesamowicie prosty (5 linijek kodu) plugin dla dokładnie tej funkcjonalności:
Http://byrichardpowell.github.com/jquery-or/
Pozwala skutecznie powiedzieć "get this element, or if that element doesn 't exist, use this element". Na przykład:
$( '#doesntExist' ).or( '#exists' );
Podczas gdy zaakceptowana odpowiedź zapewnia podobną funkcjonalność do tej, jeśli oba selektory (przed i za przecinkiem) istnieją, oba selektory zostaną zwrócone.
Mam nadzieję, że to udowodni pomocny dla każdego, kto może wylądować na tej stronie za pośrednictwem google.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-07 16:24:17
Jeśli chcesz użyć standardowej konstrukcji elementu = element1 / / element2, gdzie JavaScript zwróci pierwszy, który jest prawdziwy, możesz to zrobić dokładnie tak:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
Który zwróci pierwszy element, który został znaleziony. Jednak lepszym sposobem byłoby użycie jQuery selector comma construct (który zwraca tablicę znalezionych elementów) w ten sposób:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
Który zwróci pierwszy znaleziony element.
Używam tego od czasu do czasu, aby znajdź aktywny element na liście lub jakiś element domyślny, jeśli nie ma aktywnego elementu. Na przykład:element = $('ul#someList').find('li.active, li:first')[0]
Które zwróci dowolne li Z klasą active lub, jeśli nie ma, zwróci tylko ostatnie li.
Albo zadziała. Istnieją jednak potencjalne kary za wydajność, ponieważ | / przestanie przetwarzać, gdy tylko znajdzie coś prawdziwego, podczas gdy podejście array będzie próbowało znaleźć wszystkie elementy, nawet jeśli już je znalazło. / Align = "left" | construct może potencjalnie mieć problemy z wydajnością, jeśli musi przejść przez kilka selektorów przed znalezieniem tego, który zwróci, ponieważ musi wywołać Główny obiekt jQuery dla każdego z nich(naprawdę Nie wiem, czy jest to hit wydajności, czy nie, po prostu wydaje się logiczne, że może być). Ogólnie jednak używam podejścia array, gdy Selektor jest dość długim ciągiem znaków.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 16:32:58
Daniel A. White rozwiązanie świetnie sprawdza się na zajęciach.
Mam sytuację, w której musiałem znaleźć pola wejściowe typu donee_1_card Gdzie 1 jest indeksem.
Moje rozwiązanie zostało
$("input[name^='donee']" && "input[name*='card']")
Chociaż nie jestem pewien, czy jest to optymalne.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-23 14:36:30