2012-05-22 83 views
11

比方說,我有這樣的HTML:jQuery選擇爲選擇相匹配的特定元素後找到的第一個元素

<textarea>blah</textarea> 
<br> 
<div class="select_this">hello!</div> 

如何選擇帶班「select_this」的DIV時,我已經textarea的確定?我不想在整個文檔上使用類選擇器,因爲我正在處理大文檔,而類瀏覽器在較舊的瀏覽器中查找速度較慢。 ()只查找DOM樹,而.nextUntil()限定除了「select_this」div以外的所有內容。jQuery .next()似乎並沒有這樣做,最接近()只查找DOM樹。那裏有其他的選擇嗎?

+0

[上一個非常類似的問題很相關答案】(http://stackoverflow.com/a/29084305/274502) – cregox

回答

19

有兩種方法可以做到這一點。

使用這個,如果你只是有幾個兄弟姐妹:

$('textarea').nextAll('div.select_this').first(); 

這樣做的缺點是,它測試每個後續元素,看它是否選擇相匹配,它找到的第一個甚至後。使用這個,如果你有很多很多兄弟姐妹,以節省評價:

$('textarea').nextUntil('div.select_this').andSelf().last().next(); 

還要注意的是,最好使用firstlast方法,而不是其對應的選擇(:first:last),因爲瀏覽器本質上不理解選擇器,這大大降低了表達的速度。

編輯合併andSelf下面的每條評論。

+0

很好的回答! Upvoted! – Vishal

+1

如果由於nextUntil()調用返回一組空結果而導致兩個元素彼此相鄰,則第二個示例不起作用。 – tnunamak

+0

答案應該包括@tnunamak所說的。 – Zitrax

3

你想nextAll

jQuery(yourTextarea).nextAll('.select_this:first'); 
+0

好奇的問題:通過使用「:第一個」不jQuery的停止其查找,一旦它有資格在第一元素,還是它搜索整個DOM,然後只返回找到的第一個元素? –

+0

@ElliotB。後者。 – lonesomeday

+0

@ lonesomeday - dang,那不好,是否有辦法完成前者? –