2013-03-06 21 views
7

Potrzebuję znaleźć wszystkie elementy na stronie zawierające "znacznik" we właściwości href, a tekst elementu zawiera określone słowo.Jak znaleźć elementy pasujące do wielu warunków?

Na przykład

<a href="/my/tag/item2">cars</a> 

wiem, że mogę dostać wszystko elementy z tagiem w href takich jak to:

$("a[href*=tag]"); 

mogę również znaleźć wszystko elementy z „samochody” w tekście tak:

$("a:contains('cars')"); 

Ale jak połączyć te 2 warunki w jedno oświadczenie, które mówi: Znajdź wszystkie elementy, które zawierają "tag" w href i zawierają "samochody" w tekście?

Odpowiedz

15

Czy próbowałeś już $("a[href*=tag]:contains('cars')");?

można iść i na zawsze w ten sposób, tj

$("a.className.anotherClass[href*=tag][title=test]:contains('cars'):visible"); 
+1

ja nie wiedziałem o tym. to działa. – Dmitri

3

jak inne chłopaki powiedział, a jeśli muszą być stosowane oddzielnie, z jakiegoś innego kodu pomiędzy na przykład dwa warunki, wtedy. ..

var $tags = $("a[href*=tag]"); 

potem ...

var $carTags = $tags.filter(":contains('cars')"); 

.filter() jest uogólnionym metoda zmniejszania istniejącego wyboru jQuery.

Podobnie jak wiele innych metod jQuery .filter() zwraca obiekt jQuery więc będzie łańcuch:

var $foo = $("a[href*=tag]").filter(":contains('cars')").filter(".myClass"); 

.filter() jest również dobre dla powodów nie miał tłumaczyć, a ja nie trzeba bo @ bažmegakapa właśnie to zrobił bardzo wymownie.

+0

Kolejna fajna funkcja, o której już wiedziałem. – Dmitri

+0

+1 wydaje się, że mówimy o tym samym :) – kapa

3

Pozostałe odpowiedzi pokazują dobre i praktyczne przykłady. Ale jest tu interesujące zagadnienie, rozróżnienie między native CSS selectors (które są również obsługiwane przez natywne querySelectorAll()) i selectors defined by jQuery.

Mieszanie ich może nie być udane, ponieważ wtedy nie można użyć znacznie szybszego natywnego silnika. Na przykład na :has() jQuery docs państwowej:

Ponieważ: ma() jest rozszerzeniem jQuery i nie jest częścią specyfikacji CSS , kwerendy przy użyciu: ma() nie może skorzystać z doładowania efektywności dostarczonych przez natywna metoda DOM querySelectorAll() .

Z tego powodu, może lepiej odpytywanie metodą natywnej a następnie filtering używając żadnych konkretnych jQuery selektorów:

var $res = $("a[href*=tag]").filter(":contains('cars')"); 
+1

+1 Ładne wyjaśnienie. Powinien być na każdej liście czytelniczej jQuery dla początkujących. –

Powiązane problemy