2010-01-12 7 views
1

J'ai une div, qui contient n nombre de nœuds enfants. J'ai une boucle:Comment vérifier si une div possède un élément innerHTML

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

Voici quelques-uns des nœuds enfants ne contiennent pas l'élément innerHTML. J'ai besoin de vérifier si le noeud enfant contient l'élément innerHTML, alors j'ai besoin de vérifier le style (display: block). Comment puis-je faire cela?

+0

changé toutes les occurrences de 'innerHtml' en question' innerHTML' JavaScript est sensible à la casse. –

Répondre

5

Si vous voulez vérifier le style de quelque chose, vous n'avez pas besoin innerHTML. Au lieu de cela, accédez à la valeur display directement à partir de l'élément style défini par défaut sur les éléments DOM.

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

si (enfants [i] .style && enfants [i] .style.display == "bloquer") { Erreur ici. indique que les enfants [iloop] .style est indéfini – nimi

+0

@Nimesh: Vérifie quelle est la valeur de 'children [i]' ('alert (children [i]);'). Ce n'est probablement pas un élément DOM si la propriété 'style' n'est pas définie. –

+0

@Nimesh Change 'iloop' en' i'. J'ai fait une modification, assurez-vous d'avoir la version mise à jour. @Steve L'élément de noeud de texte DOM ne définit pas de propriété 'style', c'est pourquoi le contrôle' children [i] .style' est en place (Nimesh utilise probablement une ancienne version du code, j'ai fait une modification). –

0

Vous pouvez vérifier si l'élément a la propriété "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> 

produit:

div: true 
div.child: false 
1

Utilisez la propriété d'affichage directement:

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

obtenir l'erreur ici summaryDiv.childNodes [i] [iloop] .style est indéfini – nimi

+0

Je ne sais pas pourquoi vous faites [i] [iloop]. Avez-vous vraiment des boucles imbriquées? Le [i] devrait être tout ce dont vous avez besoin. La vérification de .style empêchera la propriété de style d'être utilisée si elle n'est pas définie. – jvenema

Questions connexes