2013-02-27 70 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