2010-03-05 83 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()解決了這個問題。