DOM是javascript操作网页的接口,全称为文档工具模型(Document Object Model)。它的浸染是将网页转为一个javascript工具,从而可以利用javascript对网页进行各种操作(比如增删内容)。浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组成一个树状构造。DOM的最小组成单位叫做节点(node),文档的树形构造(DOM树)由12种类型的节点组成。
总括一样平常地,节点至少拥有nodeType、nodeName和nodeValue这三个基本属性。节点类型不同,这三个属性的值也不相同
nodeType
nodeType属性返回节点类型的常数值。不同的类型对应不同的常数值,12种类型分别对应1到12的常数值
元素节点 Node.ELEMENT_NODE(1)属性节点 Node.ATTRIBUTE_NODE(2)文本节点 Node.TEXT_NODE(3)CDATA节点 Node.CDATA_SECTION_NODE(4)实体引用名称节点 Node.ENTRY_REFERENCE_NODE(5)实体名称节点 Node.ENTITY_NODE(6)处理指令节点 Node.PROCESSING_INSTRUCTION_NODE(7)注释节点 Node.COMMENT_NODE(8)文档节点 Node.DOCUMENT_NODE(9)文档类型节点 Node.DOCUMENT_TYPE_NODE(10)文档片段节点 Node.DOCUMENT_FRAGMENT_NODE(11)DTD声明节点 Node.NOTATION_NODE(12)
DOM定义了一个Node接口,这个接口在javascript中是作为Node类型实现的,而在IE8-浏览器中的所有DOM工具都因此COM工具的形式实现的。以是,IE8-浏览器并不支持Node工具的写法
//在标准浏览器下返回1,而在IE8-浏览器中报错,提示Node未定义console.log(Node.ELEMENT_NODE);//1
nodeName
nodeName属性返回节点的名称
nodeValue
nodeValue属性返回或设置当前节点的值,格式为字符串
接下来,将按照节点类型的常数值对应顺序,从1到12进行详细解释
元素节点
元素节点element对应网页的HTML标签元素。元素节点的节点类型nodeType值是1,节点名称nodeName值是大写的标署名,nodeValue值是null
以body元素为例
// 1 'BODY' nullconsole.log(document.body.nodeType,document.body.nodeName,document.body.nodeValue);console.log(Node.ELEMENT_NODE === 1);//true
特性节点
元素特性节点attribute对应网页中HTML标签的属性,它只存在于元素的attributes属性中,并不是DOM文档树的一部分。特性节点的节点类型nodeType值是2,节点名称nodeName值是属性名,nodeValue值是属性值
现在,div元素有id=\"大众test\"大众的属性
<div id=\公众test\"大众></div><script>var attr = test.attributes.id;//2 'id' 'test'console.log(attr.nodeType,attr.nodeName,attr.nodeValue)console.log(Node.ATTRIBUTE_NODE === 2);//true </script>
文本节点
文本节点text代表网页中的HTML标签内容。文本节点的节点类型nodeType值是3,节点名称nodeName值是'#text',nodeValue值是标签内容值
现在,div元素内容为'测试'
<div id=\公众test\"大众>测试</div><script>var txt = test.firstChild;//3 '#text' '测试'console.log(txt.nodeType,txt.nodeName,txt.nodeValue)console.log(Node.TEXT_NODE === 3);//true </script>
CDATA节点
CDATASection类型只针对基于XML的文档,只涌如今XML文档中,表示的是CDATA区域,格式一样平常为
<![CDATA[]]>
该类型节点的节点类型nodeType的值为4,节点名称nodeName的值为'#cdata-section',nodevalue的值是CDATA区域中的内容
实体引用名称节点
实体是一个声明,指定了在XML中取代内容或标记而利用的名称。 实体包含两个部分, 首先,必须利用实体声明将名称绑定到更换内容。 实体声明是利用 <!ENTITY name \"大众value\"大众> 语法在文档类型定义(DTD)或XML架构中创建的。其次,在实体声明中定义的名称随后将在 XML 中利用。 在XML中利用时,该名称称为实体引用。
实体引用名称节点entry_reference的节点类型nodeType的值为5,节点名称nodeName的值为实体引用的名称,nodeValue的值为null
//实体名称<!ENTITY publisher \"大众Microsoft Press\"大众>//实体名称引用<pubinfo>Published by &publisher;</pubinfo>
实体名称节点
上面已经详细阐明过,就不再赘述
该节点的节点类型nodeType的值为6,节点名称nodeName的值为实体名称,nodeValue的值为null
处理指令节点
处理指令节点ProcessingInstruction的节点类型nodeType的值为7,节点名称nodeName的值为target,nodeValue的值为entire content excluding the target
注释节点
注释节点comment表示网页中的HTML注释。注释节点的节点类型nodeType的值为8,节点名称nodeName的值为'#comment',nodeValue的值为注释的内容
现在,在id为myDiv的div元素中存在一个<!-- 我是注释内容 -->
<div id=\"大众myDiv\公众><!-- 我是注释内容 --></div><script>var com = myDiv.firstChild;//8 '#comment' '我是注释内容'console.log(com.nodeType,com.nodeName,com.nodeValue)console.log(Node.COMMENT_NODE === 8);//true </script>
文档节点
文档节点document表示HTML文档,也称为根节点,指向document工具。文档节点的节点类型nodeType的值为9,节点名称nodeName的值为'#document',nodeValue的值为null
<script>//9 \公众#document\"大众 nullconsole.log(document.nodeType,document.nodeName,document.nodeValue)console.log(Node.DOCUMENT_NODE === 9);//true </script>
文档类型节点
文档类型节点DocumentType包含着与文档的doctype有关的所有信息。文档类型节点的节点类型nodeType的值为10,节点名称nodeName的值为doctype的名称,nodeValue的值为null
<!DOCTYPE html><html lang=\"大众en\"大众><head><meta charset=\公众UTF-8\"大众><title>Document</title></head><body><script>var nodeDocumentType = document.firstChild;//10 \公众html\公众 nullconsole.log(nodeDocumentType.nodeType,nodeDocumentType.nodeName,nodeDocumentType.nodeValue);console.log(Node.DOCUMENT_TYPE_NODE === 10);</script></body></html>
文档片段节点
文档片段节点DocumentFragment在文档中没有对应的标记,是一种轻量级的文档,可以包含和掌握节点,但不会像完全的文档那样占用额外的资源。该节点的节点类型nodeType的值为11,节点名称nodeName的值为'#document-fragment',nodeValue的值为null
<script>var nodeDocumentFragment = document.createDocumentFragment(); //11 \公众#document-fragment\"大众 nullconsole.log(nodeDocumentFragment.nodeType,nodeDocumentFragment.nodeName,nodeDocumentFragment.nodeValue);console.log(Node.DOCUMENT_FRAGMENT_NODE === 11);//true</script>
DTD声明节点
DTD声明节点notation代表DTD中声明的符号。该节点的节点类型nodeType的值为12,节点名称nodeName的值为符号名称,nodeValue的值为null
末了
在这12种DOM节点类型中,有一些适用于XML文档,有一些是不常用的类型。而对付常用类型,后面会陆续进行详细先容,本文对这12种节点类型只做概述。
传送门JavaScript设计模式系列1、JavaScript设计模式之策略模式(Strategy Pattern)
2、JavaScript设计模式之职责链模式(Chain of Responsibility...)
3、JavaScript设计模式之享元模式(flyweight Pattern)
4、JavaScript设计模式之装饰者模式(Decorator Pattern)
5、JavaScript设计模式之代理模式(Proxy Pattern)
6、JavaScript设计模式之组合模式(Composite Pattern)
7、JavaScript设计模式之工厂模式(Factory Method Pattern)
8、JavaScript设计模式之中介者模式(Mediator Pattern)
....
参考文章:
https://www.cnblogs.com/xiaohuochai/p/5785189.html
https://www.cnblogs.com/andyhxl/p/6052911.html