2015-06-07 3 views
2

Просто выполните простую проверку для дочернего элемента моего div с идентификатором. Но он всегда возвращает true, независимо от того, пуст он или нет. Что происходит?Проверка javascript для дочернего элемента

<html> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
 
<h1 id="number"></h1> 
 
<div id="bigbox"> 
 
    <p>Follow us:</p> 
 
    <div id="box"> 
 
    <!-- javascript is lying about this div -->  
 
    </div> 
 
    
 
</div> 
 
<input id="input" type="button" value="click" /> 
 

 

 

 
<script> 
 
$("#input").click(function(){ 
 
    var ele = document.getElementById('box'); 
 
    if (ele.hasChildNodes()) { 
 
     alert("has"); 
 
     alert(ele.hasChildNodes()); 
 
    } 
 
    else{ 
 
     alert("not"); 
 
     alert(ele.hasChildNodes()); 
 
    } 
 
}); 
 
</script> 
 
</html>

+0

Метод hasChildNodes() возвращает true, если указанный узел имеет дочерние узлы, в противном случае - false. – divy3993

+0

Возможный дубликат [Haschildnodes() не работает] (http://stackoverflow.com/questions/8565928/haschildnodes-does-not-work) – MaxZoom

+0

@ divy3993 Какой дочерний узел мне не хватает? В div с id = box нет детей. Вы считаете комментарий? Я удалил это, и он по-прежнему возвращает true. Я экспериментировал с ним, и он всегда говорит правду, независимо от того, что я сделал с ним. – Zapp

ответ

3

Попробуйте как этого

if ($('#box').children().length > 0) { 
    // this div has child and do something 
} 
2

На самом деле я думаю, что все прекрасно, но есть белые места в вашем сНе коробке, так что удалить пространство и попробовать, будут решать ваш проблема.

Метод hasChildNodes() возвращает true, если указанный узел имеет дочерние узлы, в противном случае - false.

Примечание: Пробела внутри узла рассматривается как текстовые узлы, так что если вы оставить любое пустое пространство или перевод строки внутри элемента, то этот элемент еще имеет дочерние узлы.

<div id="box"></div> <!-- No space here between start and end --> 

ПРОВЕРКА ЭТАDEMO

+0

Вау, это были белые пробелы. Благодарю. – Zapp

1

пространства и линии-каналы представляют собой текстовые узлы, так что у него есть дети. Если вы не хотите использовать jQuery, вы можете просто использовать:

ele = document.getElementById('box'); 
if (ele.children.length > 0)) { 
    alert("has"); 
    alert(ele.hasChildNodes()); 
} 
else{ 
    alert("not"); 
    alert(ele.hasChildNodes()); 
} 
Смежные вопросы