当我写脚本它显示类型错误:menuLi [i]是未定义

问题描述:

这是我的代码 当我写脚本它显示类型错误:menuLi [i]是未定义

var menuLi=[]; 
$(window).load(function() { 
var menuUl = document.getElementById("sub");           
menuLi = menuUl.getElementsByTagName("LI"); 
var len = menuUl.childNodes.length; 

    nSpan = document.createElement("SPAN"); 
    var findUl; 

    for (var i = 0; i < len; i++) { 
     findUl = menuLi[i].getElementsByTagName("UL"); 
     liLen = findUl.length; 
     if (liLen > 0) { 
      menuLi[i].classList.add("myNew"); 
     } 
    } 
}); 

以上是我代码抛出错误menuLi [i]是未定义的。

+0

你能链接html代码吗? – Ozrix

+0

你不考虑'loop'中的'menuLi'长度 – Rayon

+0

你想要做什么? –

问题:

实际上你使用了错误的length循环。

说明:

因为menuLi.lengthmenuUl.childNodes.length走低,因menuUl.childNodes将包含内部menuUl和他们的孩子全部li

所以menuUl.childNodes.lengthli元素的数量乘以每个li中元素的数量。

所以i将获得比menuLi.length大,这可以解释为什么你得到menuLi[i] is undefined,因为如果你只有5 limenuUl和比如你试图让menuLi[8],其中menuLi[8]undefined

解决方案:

所以只需使用:

var len = menuLi.length; 

您从1循环使用imenuUl.childNodes.length,但你索引直入menuUl[i]。你的意思是menuUl.childNodes[i]