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>");