Получить позицию элемента списка в неупорядоченном списке (т.е. 3-й элемент списка равен 3) - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть неупорядоченный список с парой элементов списка внутри. Внутри каждого из них есть ссылка. Я хочу найти позицию элемента списка, когда кто-то нажимает на ссылку внутри него.

Например, если кто-то щелкает ссылку внутри 3-го элемента списка, он дает мне значение 3.

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

Только Javascript

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Вот простой живой пример, который делает то, что вы хотите (за исключением того, что в списке нет ссылок)

http://jsfiddle.net/8k926/2/

В поле «Результат» щелкните один из пунктов списка. У него будет обработчик, который выскакивает его порядковый номер.

Код Javascript следующий

var els = document.getElementsByTagName('li');

Array.prototype.forEach.call(els,function(el,i){
    el.addEventListener('click', function(){alert(i);}, false);
  }) ;

Хотя els подобен массиву, у него нет метода forEach. Мы можем обойти это, используя метод Array.prototype.forEach.

Обновление: Вот второй живой пример, который сужает вещи до определенного списка, в отличие от всех элементов списка.

http://jsfiddle.net/8k926/3/

Кроме того, как указывает комментатор, forEach не поддерживается повсеместно, но здесь он используется для упрощения кода.

0 голосов
/ 27 апреля 2011

Использование jQuery: добавьте событие click ко всем ссылкам в списках, которое сначала выбирает родительский элемент 'li' ссылки, затем идет назад, выбирая каждый элемент 'li', пока не останется больше выбора, и пустой объект jquery будетвернулся.Должно быть легко адаптироваться.

$('li a').click(function(){
    $node = $(this).parent();
    result = 0;
    while ($node.length > 0){
        result++;
        $node = $node.prev();
    }
    alert(result);
    return false;
});
0 голосов
/ 27 апреля 2011
// A ul only has li childnodes.

count 'backwards' from the  li element containing the clicked link.


var count= 1, li= linkelement;
while(li && li.nodeName!= 'LI') li= li.parentNode; // get the li element
while(li){
    li= li.previousSibling;
    // count previous li elements
    ++count;
}
alert(count)// firstChild is 1, not 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...