2014-07-26 4 views
7

ich habe Problem mit childNodes wie folgt:Javascript überprüfen, ob Kind Knotenelement oder Textknoten ist

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

aber

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

Es jeder scheint \n oder textnode ein child betrachtet wird, wie kann ich diese von childNodes entfernen?

+4

können Sie 'nodeType' verwenden. Textknoten haben 'nodeType = 3'. [Demo] (http://jsfiddle.net/72Ya3/). – Harry

+0

dies kann nützlich sein, ich versuchte zu erkennen, \ \ aber kann nicht – talkhabi

+0

@Harry - Ihr Kommentar gilt tatsächlich als eine Antwort. Warum posten Sie es nicht als eins? – techfoobar

Antwort

15

Sie können prüfen, verwenden, wenn ein bestimmtes Kind-Knoten um einen Textknoten oder nicht mit dem nodeType ist. Textknoten haben die nodeType als 3. Wir können entweder die Nummer oder the constant Node.TEXT_NODE zur Überprüfung verwenden.

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

danke, aber ich habe 'jQuery chilren()' und 'Länge' verwendet. Danke aber, – talkhabi

+2

Hey gute Antwort, Sie können auch die Konstante 'Node.TEXT_NODE' anstatt der bedeutungslosen' 3' verwenden. – A1rPun

+0

@ A1rPun: Netter Vorschlag. Wird in die Antwort aktualisiert. Vielen Dank :) – Harry

-3

versuchen jquery Kinder Methode
$("#test").children().size()

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

+1

danke für Ihre Antwort – talkhabi

+4

Diese triviale Anforderung benötigt jQuery nicht. Die andere Antwort ist viel korrekter und informativer. – techfoobar

+0

Dies kann mit normalem JavaScript gemacht werden: 'element.nodeType === 3 // true, wenn Element ein Textknoten ist'. Sehen Sie @ Harrys Antwort, die wahrscheinlich die akzeptierte sein sollte, und den [MDN Artikel auf nodeType] (https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType). – nickiaconis

Verwandte Themen