使用jQuery返回筛选列表中的下一个列表项

使用jQuery返回筛选列表中的下一个列表项,jquery,traversal,Jquery,Traversal,我有以下清单 <ul> <li id="item1">Item 1</li> <li id="item2">Item 2</li> <li>Item 3</li> <li id="item4">Item 4</li> </ul> 然而,当我运行这段代码时,我最终检索到的是“Item 3”,而不是“Item 4” 如何让jQuery从已筛选的LIs列表中获取正确

我有以下清单

<ul>
  <li id="item1">Item 1</li>
  <li id="item2">Item 2</li>
  <li>Item 3</li>
  <li id="item4">Item 4</li>
</ul>
然而,当我运行这段代码时,我最终检索到的是“Item 3”,而不是“Item 4”

如何让jQuery从已筛选的LIs列表中获取正确的下一项?

您想使用nextAll()。下一步只检索紧跟在当前元素后面的同级。NEXALL()将考虑以下所有兄弟姐妹。

var nextItemWithItemID = $('#item2').nextAll('li[id^=item]:first');

我昨晚有这个问题。虽然@tvanfosson提供了一种方法来访问所有后续的兄弟姐妹,但如果您想要下一个符合该标准的项目,我提出了以下解决方案(适用于您的示例):


就这样。使用
nextUntil()。但是,如果返回的集合为空(如果初始选择器和与查询匹配的下一个对象之间没有任何内容),这将不起作用--
和self()
解决了这个问题。

@tvanfosson不敢相信我以前从未遇到过这个问题,实际上我对.next()感到惊讶没有按预期的那样工作…我可以发誓它曾经被下一个匹配的兄弟姐妹使用过,哦,好吧+1我认为这是正确的方法。@Nick Craver——几乎是。这会让你得到所有这些,但还没有得到下一个项目的OP。我相信你所要做的就是索引它,对吗。索引(0)?不确定。可能需要显式地使用它。@DN-被示例愚弄了。它可能也应该有一个
:first
过滤器。将更新。
var nextItemWithItemID = $('#item2').nextAll('li[id^=item]:first');
var nextItemWithItemID = $("#item2").nextUntil("li[id^='item']").andSelf().next();