我是公认的 JS hack; JS 大师可能有更好的解决方案...
这里的问题是,只要子节点不包含具有显示属性的内联样式,divHRSupervisors.childNodes[i].style.display != 'none' 就会抛出未定义的错误,即,
有效:
<div style="display: block;">content</div>
- or -
<div style="display: none;">content</div>
不会工作:
<div>content</div>
此外,无论何时使用childNodes,都会包含所有节点,包括文本。比如……
“测试”div 的 0 个子节点:
<div id="Test"></div>
'Test' div 的 1 个子节点(div 内的文本算作子节点):
<div id="Test">content</div>
'Test' div 的 3 个子节点(1 个用于正文内容,1 个用于内部 <div> 和 1 个用于内部 <div> 的内容):
<div id="Test">
content
<div>child content</div>
</div>
在你当前的 JS 中使用条件测试,任何时候遇到不具备显示集内联样式的子节点,都会抛出错误。
一种解决方案是向您要检查style.display 属性的任何元素添加一个公共类,然后检查显示是否设置为无。大致如下:
var divs = document.getElementById("divHRSupervisors");
var children = divs.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
// someClass is a class applied to all elements you want to verify
if (child.className == 'someClass') {
// check to see if there is a display property and if the display
// property does not equal none.
if (child.style.display && child.style.display != 'none') {
alert(child.nodeName);
// do other stuff.
}
}
}
您的 HTML 将如下所示(注意 someClass 的使用):
<div id="divHRSupervisors">
<div class="someClass">hello</div>
<div class="someClass" style="display: block;">world</div>
</div>