DOM概述

一、概述
  HTML:超文本标记语言
  XHTML:严格的HTML语言标准
  DHTML:动态网页技术的统称 =HTML+CSS+JS
  XML:可扩展的标记语言,可自定义标签

  BOM(Brower Object Model):浏览器对象模型(专门操作浏览器窗口的API),没标准。
  DOM(Document Object Model):文档对象模型(专门操作网页内容的API)

  核心DOM:操作所有结构化文档(XML,HTML)的通用API
  HTML DOM:针对HTML文档的简化API
  HTML DOM不能完成所有功能,实际开发中都是核心DOM与HTML DOM配合使用

二、DOM树
  文档中的每一个元素,属性,文本,注释,都被看做一个节点对象--Node(所有节点对象的父类型)
  所有节点对象都是document对象的子节点

 1 <script>
 2     //打印任意对象的原型链
 3     function getProto(obj){
 4         while((obj=Object.getPrototypeOf(obj))!=null){
 5             console.log(console.log(obj));
 6         }
 7     }
 8     getProto(document);
 9         getProto(document.body.childNodes[1].childNodes[0]);//a
10 </script>
11 /*输出document对象的原型链
12     HTMLDocument   -->
13     Document  -->
14     Node  -->
15     EventTarget  -->
16     Object
17 */
18 /*输出一个a标签的原型链
19     Text  -->
20     CharacterData  -->
21     Node  -->
22     EventTarget  -->
23     Object  -->
24 */

  节点树:

  整个文档是一个文档节点(document node)
  每个HTML标签是一个元素节点(element node)
  包含在HTML元素中的文本是文本节点(text node)
  每一个HTML属性是一个属性节点(attribute node)
  注释属于注释节点(comment node)

节点类型 Document Element Attr Text Comment
描述 document节点对象的父类型 所有元素节点的父类型 属性节点对象的类型 文本节点对象的类型 注释节点对象的类型

 

  HTML文档内的所有内容都被视为文档树中的一个节点

  Node类型定义的3个公共属性
    nodeType:节点的类型的数值
    用于判断获得的节点类型;如果是元素节点,返回1;如果是文本节点,返回3;

节点类型 元素节点 文本节点 属性节点 注释节点 文档节点
nodeType 1 3 2 8 9

 


    nodeName:节点的名称(只读)
  用于判断获得的标签名;如果是元素节点,返回标签名(都是大写);如果是文本节点,返回#text(小写);

节点类型 元素节点 文本节点 属性节点 注释节点 文档节点
nodeName 标签名(大写) #text 属性名 #comment #document

 

    nodeValue:节点的值

      元素节点,返回null;文本节点,返回文本内容;

节点类型 元素节点 文本节点 属性节点 注释节点 文档节点
nodeValue undefiend或null 文本本身 属性值 注释文本本身 undefiend或null

 

    

  

 1 <body>
 2     <a href="http://tmooc.cn">我的链接</a>
 3     <h1>我的标题</h1>
 4  </body>
 5  <script>
 6     console.log(document.body.nodeType);//1
 7     console.log(document.body.nodeName);//BODY
 8     console.log(document.body.nodeValue);//null
 9 
10     console.log(document.body.childNodes.length);//6 空格换行都属于childNodes获取的节点
11  </script>

  

  DOM树的6种关系,6个属性(6个API):

    父子(4个):parentNode(父节点) childNodes(子节点集合) firstChild(第一个子节点) lastChild(最后一个子节点)
    兄弟(2个):previousSibling(上一个兄弟节点) nextSibling(下一个兄弟节点)

  元素树 节点树的一个子集,只包含其中的元素节点

   (IE8不兼容) children可用

原文地址:https://www.cnblogs.com/Medeor/p/4903197.html