2010-01-12 3 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. Вместо этого получите доступ к значению display непосредственно из элемента style, который по умолчанию задан для элементов 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

if (children [i] .style && children [i] .style.display == "block") { Ошибка здесь. говорит, что дети [iloop] .style не определены – nimi

+0

@Nimesh: Проверьте, что значение 'children [i]' ('alert (children [i]);'). Вероятно, это не элемент DOM, если свойство 'style' не определено. –

+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

Используйте свойство дисплея непосредственно:

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 is undefined – nimi

+0

Я не уверен, почему вы делаете [i] [iloop]. У вас действительно есть вложенные петли? [I] должно быть всем, что вам нужно. Проверка на .style предотвратит использование свойства style, если оно не определено. – jvenema

Смежные вопросы