2010-01-12 65 views
1

我有一个div,其中包含n个子节点。 我有一个循环:如何检查div是否有元素innerHTML

for (iloop = 0; iloop < summaryDiv.childNodes.length; iloop++) { 
    if (summaryDiv.childNodes[iloop].innerHTML.contains('display:block')) { 
     flag = false; 
    } 
} 

这里是一些子节点不包含元素的innerHTML。我需要检查子节点是否包含innerHTML元素,然后我需要检查样式(display:block)。 我该怎么做?

+0

改变innerHtml'的'所有出现的问题'innerHTML',JavaScript是区分大小写的。 –

回答

5

如果您要检查的东西的风格,你不需要innerHTML。相反,直接从DOM元素上默认定义的style元素访问display值。

var children = summaryDiv.childNodes; // Avoid excessive scope chain walking (faster!) 
for (var i=0, l=children.length; i<l; i++) { 
    if (children[i].style && children[i].style.display == "block") { 
     flag = false; 
    } 
} 
+0

if(children [i] .style && children [i] .style.display ==“block”){ 在此处显示错误。 says children [iloop] .style is undefined – nimi

+0

@Nimesh:检查'children [i]'的值是什么('alert(children [i]);')。如果'style'属性未定义,它可能不是DOM元素。 –

+0

@Nimesh将'iloop'改为'i'。我做了一个编辑,确保你有更新的版本。 @Steve DOM文本节点元素没有定义'style'属性,这就是为什么'children [i] .style'检查就位的原因(Nimesh可能使用了旧版本的代码,我做了编辑)。 –

0

您可以检查元素是否具有属性“innerHTML”。

<html> 
<body> 
<div id="div">hello</div> 
<script type="text/javascript"> 

    document.write("div: " + ("innerHTML" in document.getElementById("div"))); 
    document.write("<br />"); 
    document.write("div.child: " + ("innerHTML" in document.getElementById("div").firstChild)); 
</script> 
</body> 
</html> 

生产:

div: true 
div.child: false 
1

直接使用display属性:

for (var i = 0; i < summaryDiv.childNodes.length; i++) { 
    if (summaryDiv.childNodes[i].style && summaryDiv.childNodes[i].style.display == 'block') { 
     flag = false; 
    } 
} 
+0

在这里出错 summaryDiv.childNodes [i] [iloop] .style undefined – nimi

+0

我不确定你为什么要[i] [iloop]。你真的有嵌套循环? [i]应该是你所需要的。如果未定义,那么.style的检查将防止样式属性被使用。 – jvenema