jQuery nextUntil,包括匹配元素在内和不排除匹配元素?

18

有没有一种简便的方式来执行nextUntil操作,以便包括与选择器匹配的元素?我有这样一个代码,如果存在前面的同级元素则正常工作:

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

1
你能否更新你的问题,包括HTML标记的相关部分?这将有助于我们理解你想要实现什么。 - Frédéric Hamidi
7个回答

26

删除.prev(),将.nextUntil替换为.nextAll(),并在您的选择器末尾使用.addBack(),如下所示:

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

在1.8版本之前应该使用andSelf而不是addBack


7
此老问题从未被接受任何答案。供参考,现在检查此问题的任何人: "andSelf() - 注意:此函数已过时,现在是 .addBack() 的别名,应与 jQuery 1.8 及更高版本一起使用。" - jwinn
我今天(2017年7月21日)刚发现了这个答案,它对我的项目有所帮助,谢谢。 - samouray
谢谢注意到这个问题,@MikhailOrlov。我已经修复了这个边缘情况。 - Vadim
nextUntil()和addBack()的结构是<h3>后面跟着任何你想要的东西,这对我很有用。现在<h3>和其后面的内容被一个div包裹起来了。 - Daniel Soublett

2
我找到的解决方法是使用nextUntil(或prevUntil)获取length,然后在nextAll()上使用这个长度+1的slice()函数:
var inclusiveNextUntil = $(this).nextUntil( '.some-class' ).length;
var inclusiveNextUntil = $(this).nextAll().slice( 0 , inclusiveNextUntil + 1 );

它很笨拙,但它起作用。HTH

就 nextAll 文档而言,Biziclop 提到了添加 + *:(链接)

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

但是这对我没用 :/

1
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方法完成。 无需再次搜索。易于理解和记忆。

1
这是我的做法。我认为它比其他建议更简洁。
var elearr = $('selector1').nextUntil('selector2');
var lastele = elearr[elearr.length-1];
elearr.push($(lastele).next());

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

0

我认为正确的答案是

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

-1

当然可以,只需使用jQuery的nextAll

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

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


“next” 只获取单个紧随的兄弟节点,而我正在获取所有直到定义的终点的兄弟节点。 - jwinn
-1: 从 nextAll() 参考文献中获取所有匹配元素集合中每个元素的 后续 兄弟元素,可选择性地通过选择器进行过滤。因此,这将 不会 包括匹配的元素。 - user669677

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接