2016-09-21 3 views
-2

Ich arbeite daran zu lernen, wie man Javascript-Knoten analysiert, um Informationen auf verschiedene Arten zu sammeln.getElementsByTagName - Kann die Eigenschaft 'length' von undefined nicht lesen

Wenn ich den Code ausführen unten enthalten, alle Werke, bis ich auf Linie zu bekommen, die sagt:

for(var i = 0; i < olElements.childNodes.length; i++){

ich den Fehler: „Nicht abgefangene Typeerror: Kann Eigenschaft‚Länge‘undefinierter nicht lesen“.

Hier ist meine vollständige Skript:

<script type="text/javascript" language="JavaScript1.1"> 
function getNodeValue(){ 
    var olElement = document.getElementById("toDoList"); 
    var a = olElement.getElementsByTagName("li"); 
    console.log("The ordered list contains " + a.length + " items.\n\n"); 

    console.log(a[a.length - 1].lastChild.nodeValue + "\n\n"); 



    for(var i = 0; i < olElement.childNodes.length; i++){ 
     if(olElement.childNodes[i].nodeType == 1){ 
      var childOf = olElement.childNodes[i]; 
      for(var j = 0; j < childOf.childNodes.length; j++){ 
       if(childOf.childNodes[j].nodeType == 3){ 
        console.log(childOf.childNodes[j].nodeValue); 
       } 
      } 
     } 
    } 

    var oltags = document.getElementsByTagName("ol"); 
    for(var k = 0; k < oltags.childNodes.length; k++){ 
     if(oltags.childNodes[k].nodeType == 1){ 
      var childOf = oltags.childNodes[k]; 
      for(var l = 0; l < childOf.childNodes.length; l++){ 
       if(childOf.childNodes[l].nodeType == 3){ 
        console.log(childOf.childNodes[l].nodeValue); 
       } 
      } 
     } 
    } 


} 
window.onload = getNodeValue; 
</script> 

Die HTML ist die folgende:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Getting Node Values</title> 
</head> 
<body> 
    <h1>Things To Do</h1> 
    <ol id="toDoList"> 
     <li>Mow the lawn</li> 
     <li>Clean the windows</li> 
     <li>Answer emails</li> 
     <li>Learn javascript</li> 
     <li>Learn more javascript</li> 
     <li>And learn even more!</li> 
    </ol> 

    <p id="toDoNotes">Make sure all are completed by 8pm so I can watch the game on TV!</p> 
</body> 
</html> 

Ist meine Nutzung von getElementsByTagName im Code

var oltags = document.getElementsByTagName("ol");

nicht richtig? Und wenn ja, warum? Oder verursacht etwas anderes dieses Problem?

Folgefrage: Gibt es eine bessere Möglichkeit, auf Textknoten innerhalb von Elementen zuzugreifen als auf die Art und Weise, wie ich es hier gemacht habe?

+0

var oltags = document. getElementsByTagName ("ol") gibt die HTML-Sammlung zurück und Sie können auf jedes Element über seinen Index zugreifen –

+0

Das ist, was ich oben verwendet habe. Ich verstehe nicht, warum es den "undefined" Fehler gibt, wenn ich 'oltags.childNodes.length' verwende. Ich werde den Artikel lesen, auf den von @jsquerylover unten verwiesen wird. –

+0

Kann mir auch jemand sagen, warum die down votes über das für mich? Habe ich hier etwas falsch gemacht? –

Antwort

1

Warum nicht einfach die Tag-Namen verwenden?

var a = olElement.getElementsByTagName("li"); 

for(var i = 0; i < a.length; i++){ 
    if(a[i].nodeType == 1){ 

//etc 
+0

Das war der erste Weg in meinem Code, mit dem ich auf die Textknoten zugegriffen habe. Ich habe danach andere Wege versucht. Ich versuche zu verstehen, warum das funktioniert, aber der spätere Code nicht. Warum habe ich den Fehler 'undefiniert' erhalten? –

0

folgen Sie diesem Artikel für Ihr Verständnis. ElementsByTagName gibt Ihnen Live-Sammlung und manchmal leer. Sie erhalten Informationen von OL-Tag nicht seine child..If Sie bekommen verwenden Kind wollen Informationen dann ById

How to use document.getElementByName and getElementByTag?

+0

Dank @jsquerylover Ich sehe durch Lesen des Artikels, den Sie verwiesen, dass getElementById ein Element zurückgibt, während getElementsByTagName eine NodeList zurückgibt. Ich werde das weiter untersuchen müssen, um die Auswirkungen davon zu verstehen. –

0

Sie sollten document.getElementById("idOfElement") verwenden und dann iterieren auf es ein Kinder Knoten

+0

Danke. Ich habe das früher in meinem Code gemacht. Ich habe nur versucht zu sehen, ob andere Wege auch funktionieren würden. Ich verstehe nicht, warum ich den Fehler 'undefiniert' in der Codezeile, auf die ich verwiesen habe, erhalten habe. Letztendlich versuche ich nur, alle Möglichkeiten zu sehen, auf verschiedene Knoten und Knotenarten zuzugreifen und ihre Informationen zu erfassen. –

Verwandte Themen