DOM之节点层次
1.1 Node类型
DOM1级定义了一个Node接口,该接口将由DOM中的所有节点类型实现。这个Node接口在JS中是作为Node类型实现的;除了IE之外,其他浏览器可访问这个类型。JS中的所有节点类型都继承自Node类型。注意:不是所有节点类型都受到了Web浏览器的支持。
每个节点都有一个childNodes属性,其中保存着一个NodeList对象。NodeList是一种类数组对象,并不是Array的实例。它实际是基于DOM结构动态执行查询的结果。除了在IE8-中,可以使用Array.prototype.slice()方法来转换成数组。而兼容IE8-的版本如下:
function convertToArray(nodes) {
var array = null;
try {
array = Array.prototype.slice.call(nodes, 0);
} catch (ex) {
array = new Array();
for (var i = 0, len = nodes.length; i < len; i++) {
array.push(nodes[i]);
}
}
return array;
}
如果传入appendChild()中的节点已经是文档的一部分,那么结果就是把该节点从原来的位置转移到新位置。replaceChild()和removeChild()节点还是为文档所有,是不过文档中没有了位置。
cloneNode()方法用于创建一个副本。但传入参数为true时,执行深复制,复制节点以及整个子节点树;在参数为false时,执行浅复制,只复制节点本身。副本节点属于文档,但没有位置。在使用childNodes时,注意在IE8-中,不会为空白符创建节点。cloneNode()方法不会复制添加到DOM节点中的JS属性,比如事件处理程序。IE在此存在一个bug,会复制事件处理程序。所以,建议在使用方法前移除事件处理程序。
normalize()方法的作用是处理文档树中的文本节点,包括空文本节点和相邻文本节点问题。
1.2 Document类型
JS通过Document类型表示文档。document对象是HTMLDocument(继承自Document类型)的一个实例,表示整个HTML页面。而且,document对象是window对象的一个属性,因此可作为全局对象来访问。
1.2.1 文档的子节点
DOM规定Document节点的子节点可以是DocumentType、Element、ProcessingInstruction或Comment,但有两个内置的访问其子节点的快捷方式。第一个就是documentElement属性,该属性始终指向HTML页面中的<html>元素。另一个是通过childNodes列表访问文档元素。document对象还有一个body属性,直接指向<body>元素。
注意各浏览器在处理文档类型说明和<html>元素之外的注释之间的差别。会导致<html>不是document的第一个子节点。
1.2.2 文档信息
作为HTMLDocument的一个实例,document对象有一些标准Document对象没有的属性。比如:title,包含<title>元素中的文本。其中的URL、domain和referrer都是从请求的HTTP头部中取出来的。其中只有domain可以设置,但也只可以设置URL中存在的域。而且只能变紧。
当页面中包含来自其他子域的框架或内嵌框架时,能过设置document.domain就非常方便了。由于跨域安全限制,不同子域页面无法通过JS通信,可以将每个页面的document.domain设置为一样的值,就可以互相访问。
1.2.3 查找元素
主要的方法有getElementById()、getElementsByTagName()和getElementsByName()。
1.3 Element类型
Element元素用于表现XML或HTML元素。
1.3.1 HTML元素
所有的HTML元素都由HTMLElement类型表示,或者由更具体的子类型。
1.3.2 取得特性
操作特性的DOM方法主要有三个,分别是getAttribute()、setAttribute()和removeAttribute()。此处要注意:HTML元素的特性和对应的DOM元素的属性之间有些差别。比如特性中的class对应到了属性中的className。
两类特殊的特性,它们虽然有对应的属性名,但属性的值与通过getAttribute()返回的值并不相同。第一类是特性是style,通过getAttribute()访问时,返回的style特性值中包含的是CSS文本,而通过属性来访问会返回一个对象。这说明,style属性并没有直接映射到style特性。第二类特性是onclick这样的事件处理程序。通过getAttribute()访问,则会返回相应代码的字符串,而访问onclick属性时,则返回一个JS函数(没有指定时,返回null)。
1.3.3 设置特性
setAttribute()方法可以操作HTML特性,特性名统一转换为小写形式。因为所有特性都是属性,直接给属性赋值可以设置特性的值,不过为DOM元素添加自定义的属性,该属性不会自动成为元素的特性。
removeAttribute(),这个方法用于彻底删除元素的特性。
1.3.4 atttibutes属性
Element类型是使用attributes属性的唯一一个DOM节点类型。该属性中包含一个NamedNodeMap,与NodeList类似,也是一个动态的集合。
1.3.5 创建元素
使用document.createElement()方法可以创建新元素。在IE中,为这个方法传入完整的元素标签,可以用来避开IE7-中动态创建元素的某些问题。注意此种方式需要浏览器检测。
1.3.6 元素的子节点
注意各浏览器对待childNodes属性时的差异性。可利用nodeType来辅助获得目标节点。
1.4 Text类型
文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容。里面的内容不能包含HTML代码,会被转义。
1.4.1 创建文本节点
使用document.createTextNode()创建文本节点。如果两个文本节点是相邻的同胞节点,那么这两个节点中的文本就会连起来显示,中间不会有空格。
1.4.2 规范化文本节点
使用normalizez()方法可以合并多个相邻的文本节点。
1.4.3 分割文本节点
Text类型提供了一个splitText()函数,将一个文本节点分成两个文本节点。分割文本节点是从文本节点中提取数据的一种常见DOM解析技术。
1.5 Comment类型
注释在DOM中是通过Comment类型来表示的。Comment类型与Text类型继承自相同的基类,因此它拥有除了splitText()之外的其他方法。
1.6 DocumentType类型
DocumentType类型仅有Firefox、Safari和Opera支持它。
1.7 DocumentFragment类型
所有节点类型中,只有DocumentFragment在文档中没有对应的标记。虽然不能把文档片段直接添加到文档中,但可以将它作为一个“创库"来使用,提高效率。文档片段中的节点不属于文档树。通过appendChild()或insertBefore()将文档片段中内容添加到文档中,即使文档片段作为参数,也只会将子节点添加过去,文档片段本身永远不会成为文档树的一部分。
1.8 Attr类型
元素的特性在DOM中以Attr类型来表示。从技术角度讲,特性就是存在于元素的attributes属性中的节点。尽管它们也是节点,但特性却不被认为是DOM文档树的一部分。
DOM之节点层次的更多相关文章
- JS基础DOM篇之二:DOM级别与节点层次?
通过上一篇我们大致了解了什么是DOM,今天我们继续深入了解. 1.DOM级别 在大家阅读DOM标准的时候,可能会看到DOM(0/1/2/3)级的字眼,这就是DOM级别.但实际上,DOM0级 ...
- javascript DOM中的节点层次和节点类型概述
针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 因为DOM这方面的对象方法操作性都特别强,但是逻辑很简单,所以就没有涉及到实际的 ...
- DOM树节点和事件
一.前言:DOM树节点是JS的基础语句.通过节点,能够取到HTML代码中的任意标签,从而对其进行修改和添加各种视觉效果. 二.DOM树节点 DOM节点分为三大类: 元素节点,属性节点,文本节点 ...
- JavaScript之Dom1|DOM2|DOM3之DOM1【节点层次】
长文慎读. 导航: 1.节点层次 2.Node类型 3.Document类型 4.Element类型 5.Text类型 6.Comment类型 7.CDATASection类型 8.DocumentT ...
- JavaScript HTML DOM 元素(节点)
JavaScript HTML DOM 元素(节点) 创建新的 HTML 元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素 ...
- JavaScript之DOM创建节点
上几篇文章中我们罗列了一些获取HTML页面DOM对象的方法,当我们获取到了这些对象之后,下一步将对这些对象进行更改,在适当的时候进行对象各属性的修改就形成了我们平时看到的动态效果.具体js中可以修改D ...
- dom操作节点之常用方法
DOM:获取节点:{1. document.getElementById (元素id):通过元素id找到节点2. document.getElementsByClassName (元素类名classN ...
- 围绕DOM元素节点的增删改查
HTML 文档中的所有内容都是节点: 整个文档是一个文档节点 document 每个 HTML 元素是元素节点 element HTML 元素内的文本是文本节点 每个 HTML 属性是属性节点 注释是 ...
- jQuery 中使用 DOM 操作节点,对页面中的表格实现增、删、查、改操作
查看本章节 查看作业目录 需求说明: 在 jQuery 中使用 DOM 操作节点,对页面中的表格实现增.删.查.改操作 点击"增加"超链接时,将表格中的第一条数据添加到表格的末尾 ...
随机推荐
- HDU 4280Island Transport(Dinc非STL 模板)
题意: n岛m条路,然后是 n个岛的坐标,然后是m条双向路,包括 岛和 岛 之间 最大客流量,让求 最左边的岛 到右边的岛 最大客流量 分析: 建图 以 左边的岛为原点,最右边的为终点求最大客流量. ...
- IEquatable 的Equals 代替 object 的Equals
struct Point2 : IEquatable<Point2> { public int X { get; set; } public int Y { get; set; } pub ...
- 添加IP安全策略 远离系统Ping漏洞的威胁
懂得网络的人对于Ping这个最基本的网络命令一定很熟悉,它是一个非常好用的TCP/IP工具.它可以向你提供的地址发送一个小的数据包,然后侦听这台机器是否有“回答”.你可以使用机器的 Internet ...
- MySQL的外键是什么和它的作用
从上图可以看见,表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表.所以结合2张表就能保持数据的一致性.完整性. 外键的一些事项:1.表1可以有一个或者多个外键,也可以 ...
- Oracle 的表备份的方法
1.直接备份(防止误操作后数据库表不能恢复) create table new_table as select * from old_table; 2.创建表头,然后插入列(繁琐的做法) create ...
- Maven打包可执行jar
参考文献:http://blog.csdn.net/xiao__gui/article/details/47341385 方法:使用assembly插件,生成的jar包名为xxx-jar-with-d ...
- 如何在命令行模式下查看Python帮助文档---dir、help、__doc__
如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...
- 【转】SPDY协议
SPDY协议 - v3 原文:SPDY Protocol - Draft 3 翻译:邱鹏滔(QQ: 95350530,主页:www.fireflysource.com) 1 概述 HTTP协议的瓶颈在 ...
- Winform打包工具SetupFactory 9 的使用
写了个WinForm的小程序..以前没打过包..只是直接把Bin里的东西复制出来使用..自己使用是足够.但是发给别人毕竟不太好看(不牛逼)..所以就想着打包.. Vs2012自带的有打包的功能..相信 ...
- RabbitMQ 用户角色详解
RabbitMQ的用户角色分类:none.management.policymaker.monitoring.administrator RabbitMQ各类角色描述:none不能访问 managem ...