2011-12-08 56 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,並返回第一個索引。