2016-09-21 57 views
-2

我正在学习如何通过javascript节点解析以各种方式收集信息。getElementsByTagName - 无法读取未定义的属性“长度”

当我运行下面的代码在内,所有的作品,直到我去行,说:

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

我得到的错误:“遗漏的类型错误:无法读取的未定义的属性‘长’”。

这里是我完整的脚本:

<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> 

的HTML如下:

<!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> 

是我在代码的getElementsByTagName的使用

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

不正确的?如果是这样,为什么?或者是别的什么原因造成这个问题?

后续问题:有没有更好的方式来访问元素内的文本节点比我在这里做的方式?

+0

VAR oltags =文件的信息。 getElementsByTagName(“ol”)将返回HTML集合,您可以通过其索引访问每个元素 –

+0

这就是我上面使用的。我不明白为什么当我使用'oltags.childNodes.length'时它给出了“未定义”的错误。我将阅读以下@jsquerylover引用的文章。 –

+0

另外,任何人都可以告诉我为什么这个对我来说票倒下?我在这里做错了什么? –

回答

1

为什么不使用标签名称?

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

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

//etc 
+0

这是我用来访问文本节点的代码中的第一种方法。之后我正在尝试其他方式。我试图理解为什么工作,但后来的代码没有。为什么我得到'未定义'的错误? –

0

请按照这篇文章的理解。 ElementsByTagName为您提供实时收藏,有时为空。你得到OL标签而不是它的child..If你想获得孩子的信息,然后使用ById

How to use document.getElementByName and getElementByTag?

+0

感谢@jsquerylover通过阅读您引用的文章可以看出,getElementById返回一个元素,而getElementsByTagName返回一个NodeList。我需要进一步研究这个以了解这个的含义。 –

0

您应该使用document.getElementById("idOfElement"),然后遍历它的子节点

+0

谢谢。我早些时候在我的代码中做了这个。我只是想看看是否还有其他方法。不理解为什么我在我所引用的代码行上遇到'未定义'错误。最终,我只是想看看所有的方法来访问不同的节点和节点类型并获取他们的信息。 –

相关问题