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种节点:
一般地,节点至少拥有nodeType、nodeName和nodeValue这三个基本属性。
元素.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种节点类型只做概述,希望本文对大家能有所帮助。
转载自:http://www.cnblogs.com/andyhxl/p/6052911.html
DOM的概念及子节点类型【转】的更多相关文章
- DOM的概念及子节点类型
前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...
- js学习笔记14----DOM概念及子节点类型
1.概念 DOM:Document Object Model---文档对象模型 文档:html页面 文档对象:页面中的元素 文档对象模型:是一种定义,为了能够让程序(js)去操作页面中的元素. DOM ...
- DOM基础之“寻找”子节点
今天学习了JS中的DOM的内容,虽然小菜的理解不深,但希望能够记录下来,慢慢一点一点的进步,有更深的理解了,再回来补充. 首先,关于DOM的概念: 1.概念:DOM = document(文档)Obj ...
- js文本对象模型[DOM]【续】(Node节点类型)
一.Document类型 document实例1.常用的一些属性documentElement 始终指向HTML页面中的<html>元素.body 直接指向<body>元 ...
- 遍历DOM树,获取子节点
获取子节点的方法有: 方法 说明 children() 选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点. find() 选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...
- DOM Element节点类型详解
上文中我们讲解了 DOM 中最重要的节点类型之一的 Document 节点类型,本文我们继续深入,谈谈另一个重要的节点类型 Element . 1.概况 Element 类型用于表现 HTML 或 X ...
- DOM Document节点类型详解
在前面 DOM 概况 中,我们知道了 DOM 总共有 12 个节点类型,今天我们就来讲下 DOM 中最重要的节点类型之一的 document 节点类型. 1.概况 Javascript 通过 Docu ...
- xml去除指定节点,保留子节点操作
现有xml文件: <?xml version="1.0" encoding="utf-8" ?> <ShiftConfig xmlns:xsi ...
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...
随机推荐
- Linux环境下使用perl编写CGI(httpd)
例子1: /var/www/cgi-bin/hello.cgi #!/usr/bin/perl print "Content-type: text/html\n\n"; print ...
- OGG异常处理
ALTER REPLICAT LCMA1REP,BEGIN NOW 从最新的trail文件开始读取 ALTER REPLICAT LCMA1REP,EXTSEQNO 191(对应的 trail的序号 ...
- hdu 4762 公式 java
n/(n)^(m-1) import java.io.*; import java.math.*; import java.util.*; public class Main { static Big ...
- 等号赋值与memcpy的效率问题
转自:http://www.aiuxian.com/article/p-1309055.html 偶尔看到一个说法,说,小内存的拷贝,使用等号直接赋值比memcpy快得多.结合自己搜集到的资料,整理成 ...
- Eclipse调试方法及快捷键
基本操作 断点,breakpoint: F5键与F6键均为单步调试: F5是step into,也就是进入本行代码中执行,跳入 F6是step over,跳过,也就是执行本行代码,跳到下一行 F7是跳 ...
- java + jni + mingw实例开发(基于命令行窗口模式)
java+ jni + mingw 参考网址: http://wenku.baidu.com/link?url=9aQ88d2ieO7IgKLlNhJi5d3mb3xwzbezLPzSIX3ixz4_ ...
- jvm运行机制与内存管理
http://blog.csdn.net/lengyuhong/article/details/5953544 http://www.cnblogs.com/nexiyi/p/java_memory_ ...
- kylin cube测试时,报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
异常: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, i ...
- strcmp函数使用总结
Action() { /********************************* * Author:旺仔 * object:strcmp * date:2015-12-09 * fuc:我输 ...
- python特殊函数 __len__(self):
__len__ 如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数. 要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数. 例如,我们 ...