DOM的概念及子节点类型

 

前言

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

一:DOM ==> 全称: document Object Mode   文档对象模型

文档: html页面

文档对象:页面元素(节点)

文档对象模型: W3C标准定义:为了能够使用javascript去操作页面中的元素定义出来的标准

二:DOM会把文档当成一节点树,文档里面的每一个元素都是一个节点。同时定义了很多方法来操作这些节点(元素)

三:属性

  什么是属性:

    1.使用的时候不用再前面加括号

    2.一个属性肯定是某个对象下面的,所以在使用的时候肯定是调用某个对象(元素)下面的属性

  元素.childNodes     (存在兼容性,不推荐使用,推荐使用另一个 children)

      元素.children  (不管在标准还是非标准下,只包含元素类型的节点。推荐使用)

    特点:只读属性。

    代表:子节点列表集合,试剂盒就有长度,可使用数组形式获取

    只包含儿子子节点,不包含孙子子节点

    获取:实行 [] 下表获取

    标准模式下(非IE):childNodes 包含了文本和元素类型节点,也会包含非法嵌套的子节点(注意:不是孙子节点)

    非标准:childNodes只包含元素类型的节点。ie7以不会包含非法嵌套子节点

    ul元素下面的所有子元素都包括在这个childNodes属性里面

    访问ul里面的所有 li 子元素形式:

      var oul =  document.getElementById('ul');

      oul.childNodes.length    // 9  标准模式下

1 <ul id='ul'>
2 <li>1</li>
3 <li>2</li>
4 <li>3</li>
5 <li>4</li>
6 </ul>

为什么是9呢?

DOM里面定义了12种节点:

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

元素.nodeType     1 

  只读属性,代表当前元素的类型

  nodeType属性返回节点类型的常数值。不同的类型对应不同的常数值,12种类型分别对应1到12的常数值

元素.attributes

  只读属性,代表当前元素的属性是什么(如:id,border,,,等属性)

  属性列表集合

  属性的名称:元素.attributes[0].name

  属性的值:元素.attributes[0].value

 1 <ul id='ul' style= 'color','red'>
2 <li>1</li>
3 <li>2</li>
4 <li>3</li>
5 <li>4</li>
6 </ul>
7
8 var oul = document.getElementById('ul');
9 oul.attributes.length //2
10 oul.attributes[0].name //id
11 元素.attributes[1].value //red

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

元素节点                   Node.ELEMENT_NODE(1)   nodeType值: 1

属性节点                   Node.ATTRIBUTE_NODE(2)  nodeType值: 2

文本节点                   Node.TEXT_NODE(3)  nodeType值: 3

CDATA节点                    Node.CDATA_SECTION_NODE(4)   nodeType值: 4

实体引用名称节点        Node.ENTRY_REFERENCE_NODE(5)  nodeType值: 5

实体名称节点             Node.ENTITY_NODE(6)  nodeType值: 6

处理指令节点             Node.PROCESSING_INSTRUCTION_NODE(7)   nodeType值: 7

注释节点                      Node.COMMENT_NODE(8)   nodeType值: 8

文档节点                      Node.DOCUMENT_NODE(9)   nodeType值: 9

文档类型节点            Node.DOCUMENT_TYPE_NODE(10)   nodeType值: 10

文档片段节点            Node.DOCUMENT_FRAGMENT_NODE(11)   nodeType值: 11

DTD声明节点                 Node.NOTATION_NODE(12)   nodeType值: 12

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

DOM定义了一个Node接口,这个接口在javascript中是作为Node类型实现的,而在IE8-浏览器中的所有DOM对象都是以COM对象的形式实现的。所以,IE8-浏览器并不支持Node对象的写法

1 //在标准浏览器下返回1,而在IE8-浏览器中报错,提示Node未定义  2 console.log(Node.ELEMENT_NODE);//1

nodeName

nodeName属性返回节点的名称

nodeValue

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

接下来,将按照节点类型的常数值对应顺序,从1到12进行详细说明

【1】元素节点

元素节点element对应网页的HTML标签元素。元素节点的节点类型nodeType值是1,节点名称nodeName值是大写的标签名,nodeValue值是null

以body元素为例

1 // 1 'BODY' null
2 console.log(document.body.nodeType,document.body.nodeName,document.body.nodeValue)
3 console.log(Node.ELEMENT_NODE === 1);//true

【2】特性节点

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

现在,div元素有id="test"的属性

1 <div id="test"></div>
2 <script>
3 var attr = test.attributes.id;
4 //2 'id' 'test'
5 console.log(attr.nodeType,attr.nodeName,attr.nodeValue)
6 console.log(Node.ATTRIBUTE_NODE === 2);//true
7 </script>

【3】文本节点

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

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

1 <div id="test">测试</div>
2 <script>
3 var txt = test.firstChild;
4 //3 '#text' '测试'
5 console.log(txt.nodeType,txt.nodeName,txt.nodeValue)
6 console.log(Node.TEXT_NODE === 3);//true
7 </script>

【4】CDATA节点

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

1 <![CDATA[
2 ]]>

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

【5】实体引用名称节点

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

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

1 //实体名称
2 <!ENTITY publisher "Microsoft Press">
3 //实体名称引用
4 <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元素中存在一个<!-- 我是注释内容 -->

1 <div id="myDiv"><!-- 我是注释内容 --></div>
2 <script>
3 var com = myDiv.firstChild;
4 //8 '#comment' '我是注释内容'
5 console.log(com.nodeType,com.nodeName,com.nodeValue)
6 console.log(Node.COMMENT_NODE === 8);//true
7 </script>

【9】文档节点

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

 1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Document</title>
6 </head>
7 <body>
8 <script>
9 var nodeDocumentType = document.firstChild;
10 //10 "html" null
11 console.log(nodeDocumentType.nodeType,nodeDocumentType.nodeName,nodeDocumentType.nodeValue);
12 console.log(Node.DOCUMENT_TYPE_NODE === 10);
13 </script>
14 </body>
15 </html>

【11】文档片段节点

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

1 <script>
2 var nodeDocumentFragment = document.createDocumentFragment();
3 //11 "#document-fragment" null
4 console.log(nodeDocumentFragment.nodeType,nodeDocumentFragment.nodeName,nodeDocumentFragment.nodeValue);
5 console.log(Node.DOCUMENT_FRAGMENT_NODE === 11);//true
6 </script>

【12】DTD声明节点

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

总结

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

------------------>  此文转载!

关于我们DOM的知识点的更多相关文章

  1. DOM相关知识点以及原型

    DOM(增删改查): 查询 1.获取元素 1.1标准DOM API document.getElementById document.getElementsByTagName document.get ...

  2. jquary 选择器,dom操作知识点

    选择器: 1. 基本选择器 1. 标签选择器(元素选择器) * 语法: $("html标签名") 获得所有匹配标签名称的元素 2. id选择器 * 语法: $("#id的 ...

  3. js初级DOM&BOM知识点总结

    第一章 js的组成DOM BOM ECMAScript javaScript 是一种直译是脚本语言 js语言特点 .脚本编写语言 .基于对象的语言 .简单性 .动态性 .安全性 .跨平台性 C/S是C ...

  4. DOM相关知识点

    内容待补充... DOM相关注意题目: DOM的最小组成单位叫做 //节点 Node DOM 有自己的国际标准,目前的通用版本是 //DOM 3 DOM 树的根节点 //HTML 元素 Element ...

  5. js API

    从基础知识JS-web-API js基础知识:ECMA 262标准 js-web-API: w3c标准 W3c标准中关于js的规定有 DOM操作.BOM操作.事件绑定.ajax请求(包括http协议) ...

  6. XML知识学习

    第一部分[基础篇]: https://www.w3school.com.cn/xml/xml_intro.asp W3C教程地址 什么是 XML? XML 指可扩展标记语言(EXtensible Ma ...

  7. 你所不了解的javascript操作DOM的细节知识点(一)

    你所不了解的javascript操作DOM的细节知识点(一) 一:Node类型 DOM1级定义了一个Node接口,该接口是由DOM中的所有节点类型实现.每个节点都有一个nodeType属性,用于表明节 ...

  8. Javascript + Dom知识点总结

    Javascript + Dom知识点总结 1.用Javascript声明数组和字典的方式 // 数组声明 var arr = new Array(); arr["0"] = &q ...

  9. java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)

    本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义    2.XML的解析方式    3.xml的解析工具    4.XML的解析原理    5.实例    6 ...

随机推荐

  1. hdwiki 编码规范

    编码规范         命名规范 1.1.主要的目录 control 里面是控制类 ,前台命名为something.php,则后台对应的是admin_+前台名称,名称应选有意义的英文单词,例如 前台 ...

  2. 使用percona xtradb cluster的IST方式添加新节点

    使用percona xtradb cluster的IST(Incremental State Transfer)特性添加新节点,防止新节点加入时使用SST(State SnapShop Transfe ...

  3. /proc/sysrq-trigger的功能 介绍

    介绍/proc/sysrq-trigger的强大功能 让大家了解一下,在linux里,可以利用/proc/sysrq-trigger做些事情 # 立即重新启动计算机echo "b" ...

  4. protobuf安装

    Protocol Buffers - Google's data interchange format 一.简介 名字已经很好的说明它是什么,这里还是要简单的介绍一下,protobuf是protoco ...

  5. 2016CCPC东北地区大学生程序设计竞赛 1003 HDU5924

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5924 题意:根据公式求C,D 解法:打表找规律 #include <bits/stdc++.h> ...

  6. program

    [题目分析] 题目的意思是在一个数列中找到四个数,a[i]=a[j]<a[k]=a[l],其他都扯淡. 先把这些数sort一下,所有相等的数字就都排在一起了,然后这个数列可以按照数字的种类划分成 ...

  7. 【Java】聊聊常用的摘要算法,比如MD5

    摘要算法的特性 摘要算法的目的的将信息进行简单地摘要,将任意长的信息摘要成固定长的信息.比如MD5,将任意长的信息摘要成128位的摘要. 不可逆的,将报文摘要成一段信息后,无法通过摘要信息还原会报文. ...

  8. C语言培训第一天

    下面是一些命令,先来谈谈今天的若干收获吧! 计算机中的一切文件都是以二进制补码的形式存在,问题也就来了. 第一个问题 如果我们给一个无符号的数赋值一个负数,他会读取到什么,又会输出什么?(似乎问题和上 ...

  9. JavaScript语句

    JavaScript语句 1.JavaScript语句负责向浏览器发出指令,告诉浏览器应该做什么. 2.分号(;): 用于分隔JavaScript语句,通常在每条可执行的语句结尾添加分号,使用分号也可 ...

  10. <转>32位移植到64位 注意事项

    32bit-64bit porting work注意事项 64位服务器逐步普及,各条产品线对64位升级的需求也不断加大.在本文中,主要讨论向64位平台移植现有32位代码时,应注意的一些细小问题. 什么 ...