2014-07-26 14 views
7

mam problem z childNodes jak poniżej:JavaScript sprawdzić, czy węzeł dziecko jest elementem lub tekst węzeł

<ol> 
    <li>Coffee</li> 
    <li>Tea</li> 
    <li>Coca Cola</li> 
</ol> 
//childNodes.length = 7 

ale

<ol><li> Coffee </li><li> Tea </li><li> Coca Cola </li></ol> 
//childNodes.length = 3 

Wygląda na to każdy \n lub textnode jest uważany za child, jak mogę usunąć je z childNodes?

+4

Można użyć 'nodeType'. Węzły tekstowe będą miały 'nodeType = 3'. [Demo] (http://jsfiddle.net/72Ya3/). – Harry

+0

może to być przydatne, próbowałem wykryć '\ n' ale nie mogę – talkhabi

+0

@Harry - Twój komentarz faktycznie kwalifikuje się jako odpowiedź. Dlaczego nie zamieścić go jako jednego? – techfoobar

Odpowiedz

15

Można sprawdzić, czy dany węzeł dziecko jest węzłem tekstowym lub nie stosując nodeType. Węzły tekstowe będą miały nodeType jako 3. Do sprawdzenia możemy użyć numeru lub the constant Node.TEXT_NODE.

window.onload = function() { 
 
    var el = document.getElementsByTagName('ol')[0].childNodes; // using [0] as there is only one ol in the demo 
 
    console.log('Print with text nodes'); 
 
    for (var i = 0; i < el.length; i++) { // will output all nodes with "undefined" for text nodes 
 
    console.log(el[i].innerHTML); 
 
    } 
 
    console.log('Print without text nodes'); 
 
    for (var i = 0; i < el.length; i++) { // will output only non text nodes. 
 
    if (el[i].nodeType != Node.TEXT_NODE) // or if (el[i].nodeType != 3) 
 
     console.log(el[i].innerHTML); 
 
    } 
 
}
<ol> 
 
    <li>Coffee</li> 
 
    <li>Tea</li> 
 
    <li>Coca Cola</li> 
 
</ol>

+0

dziękuję ale użyłem 'jQuery chilren()' i 'długość'. Jednak dzięki – talkhabi

+2

Hej, dobra odpowiedź, możesz również użyć stałego 'Node.TEXT_NODE' zamiast bez znaczenia' 3'. – A1rPun

+0

@ A1rPun: Ładna sugestia. Zostanie zaktualizowany do odpowiedzi. Dzięki :) – Harry

-3

spróbować użyć metody Dzieci jquery
$("#test").children().size()

http://jsfiddle.net/72Ya3/2/

+1

dzięki za odpowiedź – talkhabi

+4

To banalne wymaganie nie wymaga jQuery. Druga odpowiedź jest bardziej poprawna, a także informatywna. – techfoobar

+0

Można to zrobić za pomocą zwykłego kodu JavaScript: 'element.nodeType === 3 // true, gdy element jest węzłem tekstowym'. Zobacz odpowiedź @ Harry'ego, która prawdopodobnie powinna być zaakceptowana, oraz [artykuł MDN na temat nodeType] (https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType). – nickiaconis

Powiązane problemy