2012-03-02 62 views
16

有沒有一種方法可以輕鬆實現nextUntil,以便通過選擇器匹配的元素包含在內?我有這個,如果有一個以前的兄弟這是唯一罰款:jQuery nextUntil,包括,不排除匹配的元素?

$("#content").find("h3:first").prev().nextUntil("ul:last").wrapAll("<div id='collapse'></div>"); 
+1

你能和你的HTML標記的相關部分更新你的問題?這將幫助我們理解你想要達到的目標。 – 2012-03-02 21:03:19

回答

20

刪除.prev(),並在您選擇的末尾使用.addBack(),如下圖所示:

$("#content").find("h3:first").nextUntil("ul:last").addBack().wrapAll("<div id='collapse'></div>"); 

前1.8應選用andSelf代替addBack

+7

從未接受過這個老問題的答案。僅供參考,任何人現在檢查: 「andSelf() - 注意:此函數已被棄用,現在是.addBack()的別名,應該與jQuery 1.8和更高版本一起使用。」 – jwinn 2013-10-02 20:58:05

+0

我今天剛剛發現了這個答案(21-07-2017),它幫助我完成了我的項目,ty – samouray 2017-07-21 11:16:18

-1
當然

可以,只是使用jQuery nextAll

'nextAll'將包含與該選擇器匹配的以下元素。

'nextUntil'排除匹配的選擇器元素。

+0

「下一個」只是獲得單個兄弟姐妹,而我抓住所有兄弟姐妹直到定義的終點。 – jwinn 2012-03-08 16:10:46

+0

是的,你是對的,改變我的答案。 – 2012-03-09 12:02:42

+0

-1:from nextAll()ref:獲取匹配元素集合中每個元素的所有**後面的兄弟元素,可以通過選擇器進行過濾。 ,所以這將**不包括匹配的元素。 – 2014-02-27 14:51:18

1

我找到的解決方法是讓length使用nextUntil(或prevUntil),然後在nextAll()使用slice()這個長度+ 1:

var inclusiveNextUntil = $(this).nextUntil('.some-class').length; 
var inclusiveNextUntil = $(this).nextAll().slice(0 , inclusiveNextUntil + 1); 

它的笨拙,但它的工作原理。 HTH

FWIW in the nextAll docs Biziclop mentions加入+ *

$obj.nextUntil('.last-item-to-include + *') 

但這並不爲我工作:/

1

這是我做的。我認爲這比其他建議更清潔。

var elearr = $('selector1').nextUntil('selector2'); 
var lastele = elearr[elearr.length-1]; 
elearr.push($(lastele).next()); 
0
var s = $("li.start").nextUntil("li.stop"); 
s = s.add(s.last().next()).add(s.first().prev()); 
//and do whatever you need to with s 

最直觀的,我想。所有使用jQuery方法。 無需搜索兩次。易於理解和易於記憶。

0

我認爲正確的答案是

$("#content").find("h3:first").nextUntil("ul:last").addSelf().wrapAll("<div id='collapse'></div>");