欢迎光临
我们一直在努力

JavaScript | 初步了解12中DOM节点类型

DOM简介

DOM是JavaScript操作网页的接口,全称文档对象模型。DOM的作用是把网页转化为JavaScript可以操作的对象。由于DOM并不在W3C规范范围内,所有不同浏览器对DOM操作的实现并不一样。

浏览器会根据DOM模型,把HTML文档解析成一系列的节点(节点是DOM最小的组成单位),再有这些节点组成一个树状结构(DOM树共有12种类型的节点组成)。

下面对12中DOM节点进行简单的介绍:

一般的,节点至少拥有三个基本结构nodeType、nodeName、nodeValue。节点类型不同,这三个属性的值也不相同。

nodeType属性返回节点类型的常数值,不同类型分别对应常数值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属性返回节点的名称。

nodeValue属性返回或设置当前的节点的值,格式为字符串。

元素节点

元素节点element对应网页中的HTML标签元素。元素节点的节点类型nodeType值为1(如本文前面的代码),节点名称nodeName值是大写的标签名,nodeValue的值是null

  • nodeTpye === 1
  • nodeName -- 标签名
  • nodeValue -- null
console.log(document.body.nodeType,document.body.nodeName,document.body.nodeValue)
// 1 'BODY' null
console.log(Node.ELEMENT_NODE === 1);//true

特征节点

元素节点attribute对应网页中HTML标签的属性,它只存在于元素的attributes属性中,并不是DOM文档树的一部分。特性节点的节点类型nodeType值是2,节点名称nodeName值是属性名,nodevalue值属性值

  • nodeType === 1
  • nodeName -- 属性名
  • nodeValue -- 属性值
<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 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区域。

  • nodeType === 4
  • nodeName === #cdata-section
  • nodeValue —— CDATA区域中的内容

CDATA区域的一般格式为:

<![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 —— 注释内容
<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文档,也成为根节点,指向documen对象。

  • nodeType === 9
  • nodeName === '#document'
  • nodeValue === null
<script>
//9 "#document" null
console.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" null
console.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" null
console.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文档,也有一些是不常用的类型。而对于常用类型,需要很好地掌握他们的概念及使用方式。

赞(0) 打赏
未经允许不得转载:散人研 » JavaScript | 初步了解12中DOM节点类型
分享到: 更多 (0)

评论 抢沙发

8 + 3 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏