Javascript 查找html元素

Javascript 查找html元素,javascript,html,html-lists,Javascript,Html,Html Lists,我有以下HTML标记。当单击任何li元素时,我需要将li元素w.r.t的索引获取到其父元素。 以下是HTML代码: window.onload=function(){ var allTags=document.getElementsByTagName(“li”); 对于(var i=0;i主要的问题是错误的索引,有很多事情可能是父子列表的一部分,而不是你认为是“节点”的东西,比如空白等。 要解决此问题,请将parent.firstChild切换到parent.firstElementChild并

我有以下HTML标记。当单击任何li元素时,我需要将li元素w.r.t的索引获取到其父元素。 以下是HTML代码:
window.onload=function(){
var allTags=document.getElementsByTagName(“li”);
对于(var i=0;i

  • 1文本文本文本
  • 2文本
    • 阿特沙姆 萨迈德
    • 1文本文本文本
    • 2文本文本
  • 文本文本文本
  • 文本文本文本
  • 文本文本文本
  • 文本文本文本
  • 文本文本文本
  • 文本文本文本
    • 文本文本文本
    • 文本文本文本
    • 文本文本文本
  • 文本文本文本
    • 文本文本文本
    • 文本文本文本
    • 文本文本文本
      • 文本文本文本
      • 文本文本文本
      • 文本文本文本
      • 文本文本文本

    所以,这里有一个主要问题和一个次要问题

    <> P>主要的问题是错误的索引,有很多事情可能是父子列表的一部分,而不是你认为是“节点”的东西,比如空白等。 要解决此问题,请将
    parent.firstChild
    切换到
    parent.firstElementChild
    并将
    child.nextSibling
    切换到
    child.nextElementSibling
    。这在很大程度上会修复代码,但只是修复一个小问题,您可能还希望在侦听器顶部调用
    event.stopPropagation
    ,否则它将递归调用dom层次结构上所有父级上的相同逻辑,从而产生多个可能不期望的警报

    正确代码:

    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++;
            }
        });
    }
      };
    
    window.onload=function(){
    var allTags=document.getElementsByTagName(“li”);
    
    对于(var i=0;请详细说明
    w.r.t
    的确切含义以及预期结果be@charlietfl
    w.r.t.
    意味着
    关于
    @VicJordan,我假设,但仍然没有解释预期结果,可以解释。w.r.t意味着元素相对于其父元素的索引。当我注释event.sto许可证()调用时,即使我将false作为三分之一传递给addEventListener,事件也会开始向下冒泡。为什么事件不会向上传播?在引用Dom层次结构时,向下和向上是相对的术语。默认情况下,所有JavaScript事件都从最深的节点开始,并传播到它们的父节点,一直传播到根节点,除非调用操作传播。因此,在本例中,我们调用停止传播,以便只显示选定的确切
  • 的警报。我假设这是您想要的行为,但可能我误解了。您想要其他行为吗?现在发生了什么不正确的行为?