Javascript 脚本中的循环迭代不正确
我用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
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错误。请检查浏览器控制台中的错误。