nimi
nimi

Reputation: 5507

How to check if a div has element innerHTML

I have a div, which contains n number of child nodes. I have a for loop:

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

Here some of the child nodes don't contain the element innerHTML. I need to check if the child node contains innerHTML element, then I need to check for the style (display:block). How can I do this?

Upvotes: 2

Views: 5576

Answers (3)

Justin Johnson
Justin Johnson

Reputation: 31300

If you want to check the style of something, you do not need innerHTML. Instead, access the display value directly from the style element that is defined by default on DOM elements.

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;
    }
}

Upvotes: 5

Jerod Venema
Jerod Venema

Reputation: 44632

Use the display property directly:

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

Upvotes: 1

Samuel Neff
Samuel Neff

Reputation: 74899

You can check if the element has a property "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>

produces:

div: true
div.child: false

Upvotes: 0

Related Questions