2013-02-27 67 views
2

在下面的脚本中,我试图通过DOM树,但我没有得到我期望的输出。为什么我在通过DOM树时没有从文本节点获取值?

只有在此一小块HTML的:

<p id="para">This is inside the <em>p</em> tag.</p> 

当我在树的这个举动是什么,我得到:

Node Name : P 
Node Type : 1 
Node Value : null 


Node Name : HTML 
Node Type : 1 
Node Value : null 

<html> 
<head> 
    <title>JavaScript</title> 
</head> 

<body> 
    <p id="para">This is inside the <em>p</em> tag.</p> 

    <script type="text/javascript"> 
     function nodeStatus(node) { 
      document.write("Node Name : " + node.nodeName + "<br />"); 
      document.write("Node Type : " + node.nodeType + "<br/>"); 
      document.write("Node Value : " + node.nodeValue + "<br/>"); 
      document.write("<br/> <br/>"); 
     } 
     var curElement = document.getElementById("para"); 
     nodeStatus(curElement); // p tag 
     curElement = document.firstChild; // This is inside the 
     nodeStatus(curElement); 
     curElement = document.nextSibling; // em tag 
     nodeStatus(curElement); 
     curElement = document.firstChild; // p 
     nodeStatus(curElement); 
    </script> 
</body> 

W我不知道从text-node得到的价值吗?

什么是HTML我得到的节点名称?我没有将任何节点命名为HTML

的jsfiddle:http://jsfiddle.net/HmkJQ/

+1

当然你有''节点。看看你的文档的顶部! – Bergi 2013-02-27 09:47:18

回答

5

你正在做的是从每一行代码顶级文档重新开始什么。您从以下开始:

var curElement = document.getElementById("para"); 

然后您按预期得到p元素。不过,你尝试获得p元素的孩子,但使用此代码

curElement = document.firstChild; 

你得到的是文件自己的第一个孩子(这意味着根html元素!)。

相反,你应该浏览如下:

curElement = curElement.firstChild; 

试试看吧。

0

节点名称HTML的节点是<html>元素,即document.firstChild。你没有得到任何文本节点,因为你正在遍历HTML元素,即DOM元素节点。 A bit more on this on MDN

你的代码本身处理一个名为curElement的变量,这表明你期望这些变量是元素节点而不是它们的内容。

要获得元素节点内坐节点,你可能想抓住任何给定的curElementchildNodes