Итак, у вас есть одна главная и одна второстепенная проблема.
Основная проблема, которая приводит к неправильному индексу, заключается в том, что существует множество вещей, которые могут быть частью дочернего списка родителей, которые не считаются «узлами», например, пробелами. и тому подобное.
Чтобы исправить это, переключите parent.firstChild
на parent.firstElementChild
и child.nextSibling
на child.nextElementSibling
. Это, по большей части, исправит код, но просто исправит мелкую проблему, вы также, вероятно, захотите вызвать event.stopPropagation
в верхней части слушателя, иначе он будет рекурсивно вызывать одну и ту же логику для всех родителей до конца. иерархия, приводящая к нескольким оповещениям, которые, вероятно, не ожидаются.
Правильный код:
window.onload = function(){
var allTags=document.getElementsByTagName("li");
for(var i=0;i<allTags.length;i++){
allTags[i].addEventListener("click", function(){
var x=event.target;
event.stopPropagation(); \\ prevent unnecessary alerts
var parent=x.parentElement;
var count=0;
for(var child=parent.firstElementChild;child!=null;child=child.nextElementSibling){
if(child.isSameNode(x)){
alert("Index is "+count);
return; // went ahead and returned from the listener function here, since you've found what you want
}
count++;
}
});
}
};
Ура!