2011-12-08 57 views
0

我有一系列li项目,并且需要循环它们并返回索引的最有效方法。我需要交叉检查li的课程,如果它具有某个班级,则不返回索引。遍历元素,直到在jQuery中找到匹配

这基本上是一个支持键盘的应用程序样式菜单。从本质上讲,考虑以下标记:

<ul> 
    <li class="selected">First Item</li> 
    <li class="disabled">Second Item</li> 
    <li class="separator">Third Item</li> 
    <li>Fourth Item</li> 
</ul> 

我想,我可以通过li元素使用循环播放功能,并返回一个索引(类的selected将被应用到下一个可选项目)。目前,我正在循环查看并简单检查li是否有separator的类,如果是,则增加索引并将其返回。

但是,在上例中,该函数应该返回3,因为无法选择类别为disabledseparator的任何项目。

任何人都可以提供一些建议,我怎么可能实现这个使用jQuery?我想,这也许可以做这样的事情:

function get_next_index() 
{ 
    var current_index = $('ul li.selected'); 
    var index = $('ul li:gt(' + current_index + ')').not('.disabled').not('.separator').get(0).index(); 
    if(!index || index < current_index) 
    { 
     return -1; 
    } 
    else 
    { 
     return index; 
    } 
} 

回答

3

像这样的东西应该工作:

alert($("li:not(.disabled,.separator)").index()); 

你可以看到它在这里的行动:

http://jsfiddle.net/Zf9Vv/

我对你的问题有点糊涂了,所以请让我知道如果我有哪里不对了。我建议您阅读index方法,看看您是否期望这样做。

0
$('li').each(function() { 

    if (! $(this).hasClass('disabled')) 
    { 
    // code for non-disabled li goes here 
    } 

}); 

我认为这基本上是你问什么。不确定你的意思是“返回索引” - 你是否想要所有没有“禁用”类的项目的索引数组?

0

我的贡献:

$("li.selected").nextAll(":not(.disabled,.separator)").first().index(); 

这需要所有后续的兄弟姐妹,过滤掉.disabled.separator,并返回第一个索引。