2012-02-10 132 views
0

我有三个列表。 当我点击下一步,我想获得下一个李,这是好的,但是当我到达第一个列表的结尾时,我希望下一个是第二个列表中的第一个..我会尝试解释一下更好一点。nextAll() - 多列表遍历

<ul class='list'> 
    <li image_id="1"></li> 
    <li image_id="2"></li> 
</ul> 

<ul class='list'> 
    <li image_id="3"></li> 
    <li image_id="4"></li> 
</ul> 

<ul class='list'> 
    <li image_id="5"></li> 
    <li image_id="6"></li> 
</ul> 

所以,我有三个列表。接下来我想知道有多少利的有,所以我写了..

var how_many $('ul.list li').length; 

这是件好事,这勾起所有6里的..

接下来我想找到一个李,如果它有图像ID即时通讯。

var which = $('ul.list li[image_id^="' + image_id +'"]'); 

这一切都很好。

所以现在我要去寻找下一个李娜的图片ID是什么..

var found_next = which.nextAll('ul.list li').attr('image_id'); 

这也适用..

我然后加载新的图像中使用具有回调.load更新当前image_id ...

“问题”是当点击,next..next..next等,我说到第一个列表的结尾jquery带回“未定义”不是第一个李第二个列表。有没有人有任何建议?

任何帮助将不胜感激。

+0

首先去的地方时,这些问题的发生 - > http://api.jquery.com/nextAll/组合 – elclanrs 2012-02-10 17:34:16

回答

4

.nextAll只适用于兄弟姐妹。如果要跳转到下一个<li>,则必须选择所有元素,并使用.index.eq()选择下一个<li>

var $li = $('ul.list li'); 
// Example, inside an event listener: 
    var index = $(this).index($li); 
    var nextElement = $li.eq(index + 1); 
+1

也许用'.index()'。 – 2012-02-10 17:33:20

+0

谢谢我只是抬头.index ..谢谢 - 将编辑,如果成功。 – Iamsamstimpson 2012-02-10 17:35:51

+0

@smoop你必须仔细阅读'index'。它有几种风格(正如您可以在[文档](http://api.jquery.com/index/)中看到的那样)。 PS。你也可以找到[这个答案](http://stackoverflow.com/a/8735489/938089?jquery-next-and-prev-with-a-wrapper)有用。 – 2012-02-10 17:39:23

1

不确定您是否已经计算出它。如果没有,你可以尝试:

var $li = $('ul.list li'), i = 0, $currentLi; 

$('button').click(function(){ 
    if(i < $li.length) { 
     $currentLi = $li.eq(i); //eq(i) returns a jQuery object where i is the zero-based index 
     i++ 
    }else { 
     alert('End of LIs'); 
    } 
}); 

这里是一个工作Demo

+0

这是非常优雅的解决方案,谢谢,我也会考虑到这一点。感谢您的时间。 – Iamsamstimpson 2012-02-11 12:15:42