前面的话

  DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model)。它的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容)。浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组成一个树状结构。DOM的最小组成单位叫做节点(node),文档的树形结构(DOM树)由12种类型的节点组成。本文将主要说明DOM节点类型

总括

  一般地,节点至少拥有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' null
console.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" 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文档,有一些是不常用的类型。而对于常用类型,后面会陆续进行详细介绍,本文对这12种节点类型只做概述

转载于:https://www.cnblogs.com/xiaohuochai/p/5785189.html

深入理解DOM节点类型第一篇——12种DOM节点类型概述相关推荐

  1. html dom节点类型,浅谈Javascript中的12种DOM节点类型

    前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...

  2. 12种获取节点和元素的代码

    12个代码获取元素和节点 1. element.parentNode //获取父节点 2. element.parentElement //获取父元素3. element.childNodes //获 ...

  3. 第一篇:瑞吉外卖项目概述

  4. 如何增加人机数量及平衡_如何识别自己身体类型,针对三种不同身体类型的改变策略...

    您是否有这样的感觉,为了减肥,即使食物的摄入量很少,脂肪似乎都能增加.您想增加体重,吃很多,好像也没有太大的变化.它可能与您当前的体型有关.但是真的那么简单吗?您要知道身体的复杂程度. 让我们更进一步 ...

  5. python映射类型包括哪三种_Python映射类型

    映射对象用于将哈希表值映射到任意对象.在python中,有一种称为字典的映射类型.这是可变的. 字典的键是任意的.作为值,我们可以使用不同种类的元素,例如列表,整数或任何其他可变类型的对象. 一些与字 ...

  6. html的区域大小,JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性...

    在web开发中,不可避免遇到要计算元素大小以及位置的问题,解决这类问题的方法是利用DOM提供的一些API结合兼容性处理来,所有内容大概分3篇左右的文章的来说明.本文作为第一篇,介绍DOM提供的与尺寸大 ...

  7. Nat.Commun.|使用基于注意力机制的多标签神经网络预测并解释12种RNA修饰

    今天介绍来自西交利物浦大学和福建医科大学的Zitao Song, Daiyun Huang等人六月份发表在Nature Communication的文章"Attention-based mu ...

  8. 12种数据量纲化处理方式

    在进行数据分析时,数据具有单位是非常常见的,比如说GDP可以以亿作为单元,也可以以百万作为单位,那么此时就会出现由于单位问题导致的数字大小问题:这种情况对于分析可能产生影响,因此需要对其进行处理,但是 ...

  9. python序列类型包括哪三种映射类型_python序列类型包括哪三种_后端开发

    python中表达式4+0.5值的数据类型为?_后端开发 python中表达式4+0.5值的数据类型为浮点型,因为4是整型,0.5是浮点型,在python中规定整型和浮点型相加,结果是浮点型,这是为了 ...

最新文章

  1. node.js(一)
  2. Jenkins maven 编译一些问题
  3. 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行
  4. 手机微站webapp
  5. 再严重的感冒,马上就好!!
  6. SLAM学习--常用数据集
  7. 演练 制作百度音乐标签页面 0929
  8. mysql 存储过程 预处理语句_用于预处理语句的MySQL存储过程游标
  9. java数字小游戏_java数字小游戏
  10. 【数学】线性代数技巧篇
  11. 企业信息安全管理制度
  12. js循环判断有无重复值_三种JS判断数组是否有重复值的办法
  13. matlab 电磁场工具箱,基于MATLAB软件的电磁场的可视化研究.doc
  14. ElasticSearch已有字段添加Fields
  15. win10系统无法连接xp工作组计算机,Win10系统访问XP共享打印机连接不了的解决方法...
  16. 业务流程规范的战争兴起:XPDL、BPEL、BPDM
  17. linux /home recovering journal,启动Ubuntu时出现 /dev/sda2 clean 和 /dev/sda2 recovering journal 现象的解决办法...
  18. ArrayList和LinkedList的底层源码之我见
  19. numpy.loadtxt() 处理csv文件的正确姿势
  20. 计算机3d数字游戏是什么专业,天津电子信息职业技术学院获3D数字游戏艺术赛项一等奖...

热门文章

  1. 为什么kafka的消费者要有分组的概念
  2. jquery实现页面导航列表点击添加active样式
  3. [BZOJ]2563: 阿狸和桃子的游戏
  4. php 启动服务器监听
  5. Django的ORM映射机制与数据库实战
  6. webpack 读取文件变量
  7. Android之使用HTTP协议的Get/Post方式向服务器提交数据
  8. 设为首页加入收藏代码
  9. 代码解析深度学习系统编程模型:TensorFlow vs. CNTK
  10. 中文分词器分词效果的评测方法