2013-06-11 2 views
0

позволяет сказать, что мы имеем эту разметку:Получить позицию щелкнули элемента списка

<header> 
    <nav> 
     <ul> 
     <li><a href="">first (not)</a></li> 
     <li><a href="">second</a></li> 
     <li><a href="">third</a></li> 
     <!-- ... more here --> 
     </ul> 
    </nav> 
</header> 

Я узнал о .index() функции

Я пытаюсь так:

$('body').on('click','header :not(li:first-child a) a',function(e){ 
    e.preventDefault(); 
    alert($(this).parents('ul').find('li').index(this)); 
}); 

но он всегда будет предупреждать: -1

что мне не хватает?

+1

должно быть справедливым: alert ($ (this) .parents ('ul li'). Index()); в вашем коде –

ответ

3

Try, чтобы получить только родителю:

alert($(this).parent().index()); 
+0

приятный! Спасибо –

0

Я хотел бы предложить:

$('body').on('click','header li + li a',function(e){ 
    e.preventDefault(); 
    console.log($(this).closest('li').index()); 
}); 

JS Fiddle demo

Проблема заключалась в том, как мне кажется, this в методе index; как index возвращает индекс элемента, совпадающего в данный момент, с селектором, предоставленным этому методу, и существует только: один текущий/узел и b: этот текущий узел равен не среди братьев и сестер элемента, из которых вы пытаетесь найти индекс. Следовательно, возврат -1 (в JavaScript традиционный результат, если элемент не найден в заданном массиве).

Кроме того, я сменил селектор; Я предполагал, что вы хотите найти индекс li, который не был первымli? Но я, возможно, неправильно понял селектор или ваши намерения.

Ссылки: