Какой наиболее удобный для jquery способ получить числовую позицию элемента в списке?

#jquery

#jquery

Вопрос:

Я хочу получить индекс элемента в списке, подобный этому:

 <ul>
    <li>Option 1</li>
    <li class="selected">Option 2</li>
    <li>Option 3</li>
</ul>

// doesn't work
var selected = #('ul#options li').index('.selected');
// selected should == 1
  

Я мог бы сделать это с

 var selected = -1;

$('ul#options li').each(function(a, li){
    if($(li).hasClass('selected')){
        selected = $(li).parent().children().index(li);
    }
});
// selected == 1
  

но, похоже, должен быть более простой способ добиться этого.

Редактировать:

Я придумал

 $('ul#options li').index($('ul#options li.selected'));
  

какой из них лучше. Оказывается.index() нужен объект, а не просто строка селектора.

Ответ №1:

 var selected = $('ul li.selected').index(); // 1
  

jsFiddle.

Индекс основан на 0, поэтому вторым элементом является индекс 1 .

Получение индекса в старых версиях jQuery было сложным, но сейчас это довольно просто. 🙂

Комментарии:

1. Ответ был молниеносным, пока я все еще возился с вопросом! Спасибо за предупреждение jsFiddle.

2. К вашему СВЕДЕНИЮ: это отлично работает в версии 1.5, но не выполняется < 1.4.2 — Используйте решение mcgrailm для более ранних версий jQuery.

Ответ №2:

 var selected = $('ul li').index($('.selected'));
  

скрипка

Комментарии:

1. Я думаю, что объект $ (‘.selected’) должен выполнить полный поиск. Тем не менее, это работает < 1.4.2