使用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();