2010-10-27 78 views
3

有沒有在單個查詢中結合多重選擇器和基本篩選器的方法?將多個選擇器與篩選器結合使用

例如...

var jq = $(someElement); 

// Want to find the first following sibling node which has either classA or classB. 

// This imaginary jquery does not quite work. 
jq.nextAll("(.classA, .classB):first") 

// This works. But I wonder if I can achieve the same result with just one query. 
jq.nextAll(".classA, classB)").filter(":first") 

回答

2

不知道你想什麼做的,但如果你只是想第一個元素的innerHTML,你應該能夠做這樣的事情:

$(".classA, .classB", someElement).html(); 

因爲HTML將在第一個匹配的作用元件。

否則,我看不出你的方法有什麼問題......我想你只是要求額外的知識?

我永遠也找不到了太大的必要:第一selectorbut我可能會做這樣的:

$(".classA, .classB", someElement).first(); 
+0

謝謝你的回答,安迪。如果第一個查詢有多個匹配元素,那麼jQuery會找到所有匹配並選擇第一個?我認爲在單個查詢中這樣做會讓jquery知道我只對第一個元素感興趣,這樣jquery將停止查找任何其他匹配 - 使查詢更快。也許?也許不會? – Kei 2010-10-27 03:20:24

+1

這很有趣。我試圖通過jQuery的源代碼,但不夠好,以瞭解究竟發生了什麼。我發現的第一個函數只是eq函數的別名,它調用this.slice(i,+ i + 1),其中this是結果。所以,我假設無論你如何說出這些類型的複雜選擇器,它都會抓住所有的結果,然後將它們過濾掉。這只是從我可以看到的猜測。我真的不知道它是如何工作的。 – 2010-10-27 03:35:04

+1

@Kei當找到第一個匹配時,無法告訴jQuery停止。請參閱:http://stackoverflow.com/questions/3950888 – 2010-10-27 03:59:38

5

如果你做.first(),而不是.filter(":first")

這有幫助嗎?

2

以及即時通訊很肯定這是同樣的事情,並且只使用一個查詢:

jq.nextAll('.classA:first, .classB:first'); 

顯然其MROE冗長,但除非有什麼特別的:first選擇,應該工作。

+0

我認爲這個建議...是否返回一個結果,或者匹配或者類中的第一個結果(二結果)?我不太確定,所以我拖延了,但我很好奇,知道這是否確實有效,我不想測試:-P – 2010-10-27 03:09:01

+3

這將(可能)返回兩個結果。 http://jsbin.com/igufu3/ – user113716 2010-10-27 03:11:30

+0

虐待隨着什麼patirick說,因爲我沒有測試,並從來沒有用過自己:-) – prodigitalson 2010-10-27 03:12:54

1

試試這個:

var first = jq.nextAll('.classA, .classB').first(); 

工作實例here