js Dom樹結構分析


對Dom數結構的理解,對用js操作html元素有很大的意義

先來看一下下面這段html代碼:(這里就以分析body中的元素來解釋,因為我們基本所有的操作基本都圍繞body標簽來做的)

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5 <title></title>
 6     <script type="text/javascript">
 7  window.onload = function () {  8             var _body = document.getElementsByTagName("body")[0];  9             for (var i = 0; i < _body.childNodes.length; i++) { 10  console.log(""+i+"個標簽:"+_body.childNodes[i].nodeName); 11  } 12  } 13     </script>
14 </head>
15 <body>
16     <input type="text" name="txt" value="" /><!--注釋-->
17     <a href="http://www.baidu.com">content</a><span></span>
18     <div style="border:solid red 1px;"></div>
19 </body>
20 </html>

 

第一眼的感覺,body中只有四個標簽<input> <a> <span> <div>

而我們用firefox瀏覽器打開這個html頁面,F12開發工具查看頁面得元素信息也正是我們所看到的 其他瀏覽器看到的也基本類似(除IE)

但控制台中打印的內容發現卻跟我們想象的並不一樣,打印結果是9個元素 其中#text為文本 #comment為注釋

如下圖

此時用IE打開查看html結構

針對上面的瀏覽器在解析html元素后可用用下圖來解釋

由此可以得出結果,瀏覽器會將 文本 注釋也會解釋為一個元素節點 

  值得注意的是:

1、瀏覽器解析后,</body>之前必有一個#text節點

2、寫在body標簽后面的所有標簽(包括文本及注釋),瀏覽器解析后都會將這些標簽放入body中。

用IE開發人員工具來解釋以上注意的兩點

html代碼:

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5 <title></title>
 6     <script type="text/javascript">
 7  window.onload = function () {  8             var _body = document.getElementsByTagName("body")[0];  9             for (var i = 0; i < _body.childNodes.length; i++) { 10  console.log(""+i+"個標簽:"+_body.childNodes[i].nodeName); 11  } 12  } 13     </script>
14 </head>
15 <body><a href="#"></a><br /></body>
16 </html>
17 <script></script>
18 <!--注釋-->

IE輸出結果

 

但是開發中我們一般會忽略文本元素節點注釋元素節點,簡單介紹下過濾掉這些標簽的一種方式:

Dom對象中,每個標簽元素對象都有一個nodeType屬性,分別對應的值如下

標簽節點的類型: 1
文本節點的類型: 3
注釋節點的類型: 8

code:

var _body = document.getElementsByTagName("body")[0]; for (var i = 0; i < _body.childNodes.length; i++) { if (_body.childNodes[i].nodeType == 1) { console.log("第" + i + "個標簽:" + _body.childNodes[i].nodeName); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM