浅谈Javascript中的12种DOM节点类型


Posted in Javascript onAugust 19, 2016

前言

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

属性

一般地,节点至少拥有nodeTypenodeNamenodeValue这三个基本属性。

节点类型不同,这三个属性的值也不相同

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进行详细说明 

【1】元素节点

元素节点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

 

【2】特性节点

元素特性节点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>

【3】文本节点
文本节点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>

 

【4】CDATA节点

CDATASection类型只针对基于XML的文档,只出现在XML文档中,表示的是CDATA区域,格式一般为

<![CDATA[
]]>

该类型节点的节点类型nodeType的值为4,节点名称nodeName的值为'#cdata-section',nodevalue的值是CDATA区域中的内容 

【5】实体引用名称节点

实体是一个声明,指定了在XML中取代内容或标记而使用的名称。 实体包含两个部分, 首先,必须使用实体声明将名称绑定到替换内容。 实体声明是使用 <!ENTITY name "value"> 语法在文档类型定义(DTD)或XML架构中创建的。其次,在实体声明中定义的名称随后将在 XML 中使用。 在XML中使用时,该名称称为实体引用。

实体引用名称节点entry_reference的节点类型nodeType的值为5,节点名称nodeName的值为实体引用的名称,nodeValue的值为null

//实体名称
<!ENTITY publisher "Microsoft Press">
//实体名称引用
<pubinfo>Published by &publisher;</pubinfo>

【6】实体名称节点
上面已经详细解释过,就不再赘述

该节点的节点类型nodeType的值为6,节点名称nodeName的值为实体名称,nodeValue的值为null

【7】处理指令节点

处理指令节点ProcessingInstruction的节点类型nodeType的值为7,节点名称nodeName的值为target,nodeValue的值为entire content excluding the target

【8】注释节点

注释节点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>

【9】文档节点

文档节点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>
 

【10】文档类型节点

文档类型节点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>

【11】文档片段节点

文档片段节点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>

【12】DTD声明节点

DTD声明节点notation代表DTD中声明的符号。该节点的节点类型nodeType的值为12,节点名称nodeName的值为符号名称,nodeValue的值为null 

总结

在这12种DOM节点类型中,有一些适用于XML文档,有一些是不常用的类型。而对于常用类型,后面会陆续进行详细介绍,本文对这12种节点类型只做概述,希望本文对大家能有所帮助。

Javascript 相关文章推荐
JS中style属性
Oct 11 Javascript
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
判断JavaScript对象是否可用的最正确方法分析
Oct 03 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
Jan 09 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
Jan 10 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 Javascript
原生js实现弹窗消息动画
Nov 20 Javascript
js实现select选择框效果及美化
Aug 19 #Javascript
JavaScript面向对象编写购物车功能
Aug 19 #Javascript
javascript设计模式之module(模块)模式
Aug 19 #Javascript
JS实现六位字符密码输入器功能
Aug 19 #Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 #Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 #Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
Aug 19 #Javascript
You might like
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
深入理解javascript中的this
2021/02/08 Javascript
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
简单了解django缓存方式及配置
2019/07/19 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python怎么删除缓存文件
2020/07/19 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
装潢设计专业推荐信模板
2013/11/26 职场文书
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
新课培训心得体会
2014/09/03 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
python实现图片批量压缩
2021/04/24 Python