2013-03-06 67 views
7

我需要做的是在頁面 中找到href屬性中包含「tag」的所有元素,並且元素的文本包含某個單詞。如何找到符合多個條件的元素

例如

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

我知道我可以得到標籤全部元素在href這樣的:

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

我還可以找到全部的文字與「車」元素像這樣:

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

但是,如何將這兩個條件合併成一個聲明: 在文本中查找包含'tag'的所有元素並在文本中包含'cars'?

回答

15

你試過$("a[href*=tag]:contains('cars')");

可以作爲其他人說還是去和永遠這樣,即

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

我不知道。有用。 – Dmitri 2013-03-06 23:50:42

3

,如果這兩個條件,需要分開在例如之間,與其他一些代碼,然後。 ..

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

再後來......

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

.filter()是廣義方法來減少現有的jQuery選擇。

像許多其他jQuery方法.filter()返回一個jQuery對象,因此它將鏈:

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

.filter()也不錯的原因,我不打算解釋了,我也不需要,因爲@bažmegakapa剛剛做得非常雄辯。

+0

我現在知道的另一個不錯的功能。 – Dmitri 2013-03-06 23:51:34

+0

+1好像我們正在談論同樣的事情:) – kapa 2013-03-06 23:52:59

3

其他答案顯示罰款和工作的例子。但是這裏有一個有趣的怪癖,區別native CSS selectors(也支持本地querySelectorAll())和selectors defined by jQuery

混合它們可能不是幸運的,因爲那麼更快的本地引擎不能使用。例如在:has() jQuery的文檔狀態:

因爲:具有()是一個jQuery擴展,而不是CSS 規範的一部分,使用查詢:具有()不能獲取由提供的 性能提升的優點原生DOM querySelectorAll() 方法。

出於這個原因,你可能會使用任何jQuery的具體選擇更好用本地方法查詢,然後filtering

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

+1很好的解釋。應該在每個jQuery新手的閱讀列表中。 – 2013-03-06 23:59:29

相關問題