DOM的概念及⼦节点类型
前⾔
DOM的作⽤是将⽹页转为⼀个javascript对象,从⽽可以使⽤javascript对⽹页进⾏各种操作(⽐如增删内容)。浏览器会根据DOM模型,将HTML⽂档解析成⼀系列的节点,再由这些节点组成⼀个树状结构。DOM的最⼩组成单位叫做节点(node),⽂档的树形结构(DOM树)由12种类型的节点组成。
⼀:DOM ==> 全称: document Object Mode  ⽂档对象模型
⽂档: html页⾯
⽂档对象:页⾯元素(节点)
⽂档对象模型: W3C标准定义:为了能够使⽤javascript去操作页⾯中的元素定义出来的标准
⼆:DOM会把⽂档当成⼀节点树,⽂档⾥⾯的每⼀个元素都是⼀个节点。同时定义了很多⽅法来操作这些节点(元素)
三:属性
  什么是属性:
    1.使⽤的时候不⽤再前⾯加括号
    2.⼀个属性肯定是某个对象下⾯的,所以在使⽤的时候肯定是调⽤某个对象(元素)下⾯的属性
  元素.childNode s(存在兼容性,不推荐使⽤,推荐使⽤另⼀个 children)
元素.children  (不管在标准还是⾮标准下,只包含元素类型的节点。推荐使⽤)
    特点:只读属性。
    代表:⼦节点列表集合,试剂盒就有长度,可使⽤数组形式获取
    只包含⼉⼦⼦节点,不包含孙⼦⼦节点
    获取:实⾏ [] 下表获取
    标准模式下(⾮IE):childNode s 包含了⽂本和元素类型节点,也会包含⾮法嵌套的⼦节点(注意:不是孙⼦节点)
    ⾮标准:childNode s只包含元素类型的节点。ie7以不会包含⾮法嵌套⼦节点
    ul元素下⾯的所有⼦元素都包括在这个childNode s属性⾥⾯
    访问ul⾥⾯的所有 li ⼦元素形式:
      var oul =  ElementById('ul');
      oul.childNode s.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种节点:
⼀般地,节点⾄少拥有nodeType、nodeName和nodeValue这三个基本属性。
元素.nodeType    1
  只读属性,代表当前元素的类型
  nodeType属性返回节点类型的常数值。不同的类型对应不同的常数值,12种类型分别对应1到12的常数值
  只读属性,代表当前元素的属性是什么(如:id,border,,,等属性)
  属性列表集合
  属性的名称:元素.attribute s[0].name
  属性的值:元素.attribute s[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 =  ElementById('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进⾏详细说明
元素节点element对应⽹页的HTML标签元素。元素节点的节点类型nodeType值是1,节点名称nodeName值是⼤写的标签名,nodeValue值是null
以body元素为例
1 // 1 'BODY' null
2 console.log(deType,deName,deValue)
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>
3var attr = test.attributes.id;
4//2 'id' 'test'
5    console.deValue)
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>
子字符串是什么
3var txt = test.firstChild;
4//3 '#text' '测试'
5    console.deValue)
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>
3var com = myDiv.firstChild;
4//8 '#comment' '我是注释内容'
5    console.deValue)
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>
9var nodeDocumentType = document.firstChild;
10//10 "html" null
11    console.deValue);
12    console.log(Node.DOCUMENT_TYPE_NODE === 10);
13</script>
14</body>
15 </html>
【11】⽂档⽚段节点
⽂档⽚段节点DocumentFragment在⽂档中没有对应的标记,是⼀种轻量级的⽂档,可以包含和控制节点,但不会像完整的⽂档寻亲战胜额外的资源。该节点的节点类型nodeType的值为11,节点名称nodeN
ame的值为'#document-fragment',nodeValue的值为null
1<script>
2var nodeDocumentFragment = ateDocumentFragment();
3//11 "#document-fragment" null
4    console.deValue);
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种节点类型只做概述,希望本⽂对⼤家能有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。