Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 脚本中的循环迭代不正确_Javascript_Loops_For Loop_Iteration - Fatal编程技术网

Javascript 脚本中的循环迭代不正确

Javascript 脚本中的循环迭代不正确,javascript,loops,for-loop,iteration,Javascript,Loops,For Loop,Iteration,我用JavaScript为一个大学项目编写了一个循环,用于设置多个元素的样式值: for (var i=1; i<6; i++) { document.getElementById("profile_details").childNodes[i].style.display = "block"; } <ul id="profile_details"> <li>Artist</li> <li

我用JavaScript为一个大学项目编写了一个循环,用于设置多个元素的样式值:

for (var i=1; i<6; i++) {
    document.getElementById("profile_details").childNodes[i].style.display =
    "block";
}
    <ul id="profile_details">
        <li>Artist</li>
        <li style="display:none;">Address: </li>
        <li style="display:none;">City: </li>
        <li style="display:none;">Postcode: </li>
        <li style="display:none;">Telephone: </li>
        <li style="display:none;">Website: </li>
    </ul>
我的问题是循环只迭代两次,这可以通过警告'i'的值来证明;而不是期望的五次

然而,当循环中的语句被注释掉后,循环确实迭代了正确的次数,因此我假设该语句存在问题,会导致循环行为异常

如有任何答复/建议,将不胜感激

编辑:

感谢所有快速回复,这里是profile_details元素,显示有3个以上的子元素:

for (var i=1; i<6; i++) {
    document.getElementById("profile_details").childNodes[i].style.display =
    "block";
}
    <ul id="profile_details">
        <li>Artist</li>
        <li style="display:none;">Address: </li>
        <li style="display:none;">City: </li>
        <li style="display:none;">Postcode: </li>
        <li style="display:none;">Telephone: </li>
        <li style="display:none;">Website: </li>
    </ul>
似乎在profile_details中只有3个childnode,所以在尝试访问未定义的样式时会出现TypeError

您应该在控制台中看到这一点:

TypeError:无法读取未定义的属性“style”

您应该首先检查它有多少子循环,然后将循环设置为该数量:

var children = document.getElementById("profile_details").childNodes;

for (var i = 1, l = children.length; i < l; i++) {
    children [i].style.display = "block";
}
这将影响所有的孩子,除了第一个。如果您还希望第一个受此影响,则应从0:var i=0启动计数器。

您确定profile\u details元素至少有5个子元素吗?您可能应该这样做,以提高性能并正确工作:

var profileDetailsChildren = document.getElementById("profile_details").childNodes;
for (var i=0; i<profileDetailsChildren.length; i++) {
    profileDetailsChildren[i].style.display = "block";
}

元素有多少子节点?document.getElementByIdprofile_details.childNodes.length将告诉您。很可能只有3个。尝试访问不存在的数组元素时出错。

如果您不知道元素有多少子节点,可以这样迭代:

var elems = document.getElementById("profile_details").childNodes;
for (var i=1; i<elems.length; i++) {
    elems[i].style.display = "block";
}
另一种选择是使用不包含textNodes的children集合:


旁白:在循环外部执行var someVar=document.getElementByIdprofile_详细信息,然后在内部执行someVar.childNodes[i]循环。如果没有更多信息,childNodes[3]可能未定义,导致Javascript错误。请检查浏览器控制台中的错误。