前言

DOM的作用是将网页转为一个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进行详细说明

【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"的属性

var attr = test.attributes.id;

//2 'id' 'test'

console.log(attr.nodeType,attr.nodeName,attr.nodeValue)

console.log(Node.ATTRIBUTE_NODE === 2);//true

【3】文本节点

文本节点text代表网页中的HTML标签内容。文本节点的节点类型nodeType值是3,节点名称nodeName值是'#text',nodeValue值是标签内容值

现在,div元素内容为'测试'

测试

var txt = test.firstChild;

//3 '#text' '测试'

console.log(txt.nodeType,txt.nodeName,txt.nodeValue)

console.log(Node.TEXT_NODE === 3);//true

【4】CDATA节点

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

]]>

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

【5】实体引用名称节点

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

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

//实体名称

//实体名称引用

Published by &publisher;

【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元素中存在一个

var com = myDiv.firstChild;

//8 '#comment' '我是注释内容'

console.log(com.nodeType,com.nodeName,com.nodeValue)

console.log(Node.COMMENT_NODE === 8);//true

【9】文档节点

文档节点document表示HTML文档,也称为根节点,指向document对象。文档节点的节点类型nodeType的值为9,节点名称nodeName的值为'#document',nodeValue的值为null

//9 "#document" null

console.log(document.nodeType,document.nodeName,document.nodeValue)

console.log(Node.DOCUMENT_NODE === 9);//true

【10】文档类型节点

文档类型节点DocumentType包含着与文档的doctype有关的所有信息。文档类型节点的节点类型nodeType的值为10,节点名称nodeName的值为doctype的名称,nodeValue的值为null

Document

var nodeDocumentType = document.firstChild;

//10 "html" null

console.log(nodeDocumentType.nodeType,nodeDocumentType.nodeName,nodeDocumentType.nodeValue);

console.log(Node.DOCUMENT_TYPE_NODE === 10);

【11】文档片段节点

文档片段节点DocumentFragment在文档中没有对应的标记,是一种轻量级的文档,可以包含和控制节点,但不会像完整的文档寻亲战胜额外的资源。该节点的节点类型nodeType的值为11,节点名称nodeName的值为'#document-fragment',nodeValue的值为null

var nodeDocumentFragment = document.createDocumentFragment();

//11 "#document-fragment" null

console.log(nodeDocumentFragment.nodeType,nodeDocumentFragment.nodeName,nodeDocumentFragment.nodeValue);

console.log(Node.DOCUMENT_FRAGMENT_NODE === 11);//true

【12】DTD声明节点

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

总结

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

html dom节点类型,浅谈Javascript中的12种DOM节点类型相关推荐

  1. php中的js弹窗,浅谈javascript中的三种弹窗

    js中三种弹窗 1)alert 弹出警告 无返回值---------alert('第一行\n第二行'); 2)confirm()选择确定或取消,返回t或f----var result = confir ...

  2. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  3. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  4. 浅谈JavaScript中的NaN

    浅谈JavaScript中的NaN NaN概念以及简单案例 追寻的纯粹该拥有自己的本质.-JC.F 什么是NaN? NaN:NaN(Not a Number),它表示不是数字,但是仍是数值类型. Na ...

  5. html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight...

    浅谈JavaScript中scrollTop.scrollHeight.offsetTop.offsetHeight 发布时间:2020-07-17 09:27:20 来源:亿速云 阅读:223 作者 ...

  6. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  7. 浅谈JavaScript中的对象和类型(上)

    JavaScript是一种不同于任何强类型程序设计语言的脚本语言,这决定了它对于许多强类型语言的程序员来说有很多莫名其妙.难以理解的地方,本文是本人对JavaScript的一些实践总结出来的简单易懂的 ...

  8. 浅谈JavaScript中的事件

    事件在javascript中是响应用户的一种基本操作,本文列举了两种javascript中的事件模型及其绑定的方式,希望能对你的学习带来一点帮助.这些都是非常基础的但或许其中有你所遗漏.(以下事件均针 ...

  9. 浅谈Javascript中的函数重载实现

    其它面向对象语言如Java的一个常见特性是:能够根据传入的不同数量量或类型的参数,通过"重载"函数来发挥不同的功用.但是这个特性在Javascript中并没有被直接支持,可是有很多 ...

最新文章

  1. C++中string erase函数的使用
  2. css行高line-height的用法
  3. 虚拟光驱的开发者斟酌了很久
  4. Nginx 的常用命令
  5. UITableViewCell的选中时的颜色设置
  6. 编写带界面的ActiveX控件(CAB网页控件)全过程
  7. python解释器配置_Python解释器的配置
  8. 三菱PLC编程软件Work2的FB块加密后的解密方法
  9. oracle sql列转行_Oracle列转行函数使用
  10. java通过SMTP发送QQ邮件(参考龙果学院)
  11. 论文写作—如何添加图注、公式、表注的序号,自动编号,交叉引用方式
  12. podfile文件用到的Ruby语言的学习和使用
  13. muti-thread fork
  14. 关于公共IP地址(公网ip):您需要知道的一切
  15. 【架构设计】如何实现3ms内从1000w级别的用户里面随机抽奖出100名用户
  16. 机器学习——监督学习(一)
  17. keypress,keydown,keyup的区别:
  18. 2022-2028全球激光全息膜行业调研及趋势分析报告
  19. Flink的Source端和Sink端大全
  20. Arduino 常用函数参考文档

热门文章

  1. MVC Filter自定义异常(拦截)
  2. 【异常】 Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.
  3. Ubuntu “载入软件包列表失败”
  4. 解决Android图库不识别.nomedia的问题
  5. 支付宝支付 订单参数异常,请重新下单后再发起付款
  6. 解决:夜神模拟器连不上adb的问题
  7. jQuery针对多个元素的相同点击事件
  8. sshpass连接主机以及执行命令
  9. Python多线程中阻塞(join)与锁(Lock)的使用误区
  10. RabbitMQ的安装及集群搭建方法