jQuery nextUntil,包括,不排除匹配的元素?

时间:2012-03-02 19:32:20

标签: jquery jquery-traversing

有没有办法轻松做nextUntil,以便包含选择器匹配的元素?我有这个,如果有一个以前的兄弟,这是很好的:

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

7 个答案:

答案 0 :(得分:21)

删除.prev()并使用选择器末尾的.addBack(),如下所示:

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

Pre 1.8应使用andSelf代替addBack

答案 1 :(得分:1)

我找到的解决方法是使用length(或nextUntil)获取prevUntil,然后在slice()上使用此nextAll()长度+ 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 + *')  

但这对我不起作用:/

答案 2 :(得分:1)

这就是我的工作。我认为它比其他建议更清晰。

var elearr = $('selector1').nextUntil('selector2');
var lastele = elearr[elearr.length-1];
elearr.push($(lastele).next());

答案 3 :(得分: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方法制作。 无需搜索两次。易于理解且易于记忆。

答案 4 :(得分:0)

我认为正确答案是

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

答案 5 :(得分:0)

正如其他人所回答的那样,使用.addSelf()是使起始元素具有包容性的解决方案。

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

为了使结束元素具有包容性,使用.nextUntil(".class + *")方法解决了问题。

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

答案 6 :(得分:-1)

当然可以,只需使用jQuery nextAll

'nextAll'将包含与该选择器匹配的以下元素。

而'nextUntil'排除匹配的选择元素。