2010-03-05 172 views
2

返回一个表项,我有以下列表使用jQuery筛选列表中

<ul> 
    <li id="item1">Item 1</li> 
    <li id="item2">Item 2</li> 
    <li>Item 3</li> 
    <li id="item4">Item 4</li> 
</ul> 

使用jQuery,我试图穿越LIS其ID开始与“项目”列表中。

var nextItemWithItemID = $("#item2").next("li[id^='item']); 

但是,当我运行此代码时,我最终检索“Item 3”而不是“Item 4”。

我怎样才能jQuery来从LIS的过滤列表获取正确的下一个项目?

回答

6

你想用nextAll()。接下来只是在当前元素之后立即检索兄弟。 NextAll()将考虑以下所有的兄弟姐妹。

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

@tvanfosson不敢相信,我从来没有碰到过这个问题之前,竟是用。接下来惊讶()没有按预期工作...我可以发誓,它曾经去到下一个匹配的兄弟姐妹,哦好。 +1这是我正确的做法。 – 2010-03-05 20:41:14

+0

@Nick Craver - 几乎是。这会让你们全部都完成,但是还没有把OP运送到下一个项目。我相信你所要做的只是索引它,对吧? .index(0)?不确定。可能想要明确这一点。 – 2010-03-05 20:44:17

+0

@DN - 被示例愚弄。它也许应该有一个':first'过滤器。将更新。 – tvanfosson 2010-03-05 20:55:30

1

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

var nextItemWithItemID = $("#item2").nextUntil("li[id^='item']").andSelf().next(); 

这它。使用nextUntil()抓住一切直到术语,但不包括它,所以你必须使用next()。但是,如果返回的集合是空的(如果您的初始选择器与匹配您的查询的下一个事物之间没有任何关系),那么这将不起作用 - andSelf()解决了这个问题。