JavaScript中Element與Node的區別,children與childNodes的區別

============轉載=================
html


Node(節點)是DOM層次結構中的任何類型的對象的通用名稱,Node有不少類型,如元素節點,屬性節點,文本節點,註釋節點等,經過NodeType區分,常見的有:
node

節點類型 NodeType
元素element 1
屬性attr 2
文本text 3
註釋comments 8
文檔document 9

  更多節點類型參考:https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType?redirectlocale=en-US&redirectslug=nodeType測試

  Element繼承了Node類,也就是說Element是Node多種類型中的一種,即當NodeType爲1時Node即爲ElementNode,另外Element擴展了Node,Element擁有id、class、children等屬性。spa

  以上就是Element跟Node的區別。
code

那麼用document.getElementById("xxx")取到的是Node仍是Element呢?咱們來測試一下:orm

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Demo</title>
</head>
<body>
<div id="test">
  <p>One</p>
  <P>Two</p>
</div>
<script>
        var oDiv=document.getElementById("test"); 
        console.log(oDiv instanceof Node); //true console.log(oDiv instanceof Element); //true
  </script>
</body>
</html>

 咱們能夠看到用document.getElementById("xxx")取到的既是Element也是Nodehtm

  children是Element的屬性,childNodes是Node的屬性,咱們再來測試一下:對象

經過上面的代碼咱們能夠看到,Element的children[0]仍爲Element,是Node和Element的實例,Node的childNdoes[0]爲Node,只是Node的實例,不是Element的實例。繼承

  同時,Node的children屬性爲爲undefined。 
ip

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Demo</title>
</head>
<body>
<div id="test">
  <p>One</p>
  <P>Two</p>
</div>
<script>
 var oDiv=document.getElementById("test");
   console.log(oDiv.children[0] instanceof Node); //true
   console.log(oDiv.children[0] instanceof Element);//true
   console.log(oDiv.childNodes[0] instanceof Node); //true 
   console.log(oDiv.childNodes[0] instanceof Element);//false 
   console.log(typeof oDiv.childNodes[0].children); //undefined 
   console.log(typeof oDiv.childNodes[0].childNodes); //object
   </script>
</body>
</html>

經過上面的代碼咱們能夠看到,Element的children[0]仍爲Element,是Node和Element的實例,Node的childNdoes[0]爲Node,只是Node的實例,不是Element的實例。

  同時,Node的children屬性爲爲undefined

相關文章
相關標籤/搜索