JavaScript高级程序设计10--DOM2和DOM3

DOM1级主要定义的是HTML和XML文档的底层结构。DOM2 和DOM3 级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的XML特性。为此,DOM2 和 DOM3 级分为许多模块,这些模块如下:

  • DOM2级核心 (Core): 在1级核心基础上构建,为节点添加了更多方法和属性;
  • DOM2级视图 (Views): 为文档定义了基于样式信息的不同视图;
  • DOM2级事件 (Events): 说明了如何使用事件与 DOM 文档交互;
  • DOM2级样式 (Style): 定义了如何以编程方式来访问和改变 CSS 样式信息;
  • DOM2级遍历和范围 (Traversal and Range): 引入了遍历 DOM 文档和选择其特定部分的新接口;
  • DOM2级HTML (HTML): 在1级HTML基础上构建,添加了更多属性、方法和新接口。
一、 DOM 变化
可以通过下列代码来确定浏览器是否支持这些 DOM 模块:
var supportsDOM2Core = document.implementation.hasFeature("Core", "2.0");
var supportsDOM3Core = document.implementation.hasFeature("Core", "3.0");
var supportsDOM2HTML = document.implementation.hasFeature("HTML", "2.0");
var supportsDO2Views = document.implementation.hasFeature("Views", "2.0");
var supportsDOM2XML = document.implementation.hasFeature("XML", "2.0");
注意:IE不支持任何 DOM2 和 DOM3 级模块。其他浏览器的支持情况也各异。
1. 其他方面的变化(除XML命名空间)

(1)DocumentType类型的变化

DocumentType类型新增了3个属性:publicId、systemId和internalSubset。

  • publicId和systemId表示的是文档类型声明中的两个信息段。
  • internalSubset用于访问包含在文档类型声明中的额外定义。

(2)Document 类型的变化

  • importNode()方法:用于从一个文档中取出一个节点,然后将其导入到另一个文档,使其成为这个文档结构的一部分。接收两个参数:要复制的节点和一个表示是否复制子节点的布尔值。
  • defaultView 属性:其中保存着一个指针,指向拥有给定文档的窗口 (或框架)。除IE之外的所有浏览器都支持 ,在 IE 中有一个等价的属性名叫 parentWindow 。因此,要明确文档的归属窗口,可以使用以下代码:

var parentWindow = document.defaultView || document.parentWindow;

除此之外,“DOM2级核心”还为document.implementation对象规定了两个新方法:createDocumentType()和createDocument()。

  • createDocumentType():用于创建一个新的DocumentType节点,接收3个参数:文档类型名称、publicId、systemId。
  • createDocument():用于创建新文档,接收三个参数:针对文档中元素的namespaceURI、文档元素的标签名、新文档的文档类型。

“DOM2级HTML”为document.implementation新增了一个方法:createHTMLDocument():创建一个完整的HTML文档,接收一个参数即新创建文档的标题,返回新的HTML文档。

(3)Node类型的变化

  • isSupported()方法:用于确定当前节点具有什么能力,接收两个参数:特性名和特性版本号。
  • isSameNode()和isEqualNode()方法:用于比较节点,都接收一个节点参数。
  • setUserData()方法:将数据指定给节点,接收3个参数:要设置的键、实际的数据和处理函数。处理函数接收5个参数:表示操作类型的数值(1表示 复制,2表示导入,3表示删除,4表示重命名)、数据键、数据值、源节点和目标节点。

(4)框架的变化

contentDocument属性:包含一个指针,指向表示框架内容的文档对象。

IE8之前不支持框架中的 contentDocument 属性,但支持一个名叫 contentWindow 的属性,该属性返回框架的 window 对象,而这个 window 对象又有一个 document 属性。因此,要想在上述所有浏览器中访问内嵌框架的文档对象,可以使用下列代码:

var iframe = document.getElementById("myIframe");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
二、样式

1. 访问元素的样式
任何支持 style 特性的 HTML 元素在 JavaScript 中都有一个对应的 style 属性,这个 style 对象是 CSSStyleDeclaration 的实例,包含着通过 HTML 的 style 特性指定的所有样式信息,但不包含与外部样式表或嵌入样式表经层叠而来的样式。对于使用短划线 (分割不同的词汇,例如 background-image) 的CSS 属性名,必须将其转换成驼峰大小写形式style.backgroundImage,才能通过 JavaScript 来访问。
(1)DOM样式属性和方法
"DOM2级样式" 规范还为 style 对象定义了一些属性和方法。这些属性和方法在提供元素的 style 特性值的同时,也可以修改样式。

  • cssText:通过它能够访问到style特性中的CSS代码。
  • length:应用给元素的CSS属性的数量。
  • getPropertyValue(propertyName):返回给定属性的字符串值。
  • item(index):返回给定位置的CSS属性的名称。
  • removeProperty(propertyName):从样式中删除给定属性。
  • 。。。。。

(2)计算的样式
"DOM2级样式" 增强了 document.defaultView ,提供了 getComputedStyle() 方法:这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串 (例如:"after"),返回一个 CSSStyleDeclaration 对象。

注意:IE不支持此方法,但有类似的概念:currentStyle属性。
2. 操作样式表
CSSStyleSheet 类型表示的是样式表,继承自StyleSheet。

(1)CSS规则

CSSRule对象表示样式表中的每一条规则,它是一个基类型,其中最常见的是CSSStyleRule类型,表示样式信息,包含以下属性:

  • cssText:返回整条规则对应的文本。
  • selectorText:返回当前规则的选择符文本。
  • style:一个CSSStyleDeclaration 对象,可以通过它设置和取得规则中特定的样式值。
  • 。。。。

var sheet = document.styleSheets[0];
var rules = sheet.cssRules || sheet.rules;	//取得规则列表
var rule = rules[0];	//取得第一条规则
alert(rule.style.cssText);	//完整的CSS代码
rule.style.backgroundColor = "red"

(2)创建规则

insertRule()方法:接收两个参数:规则文本和表示在哪里插入规则的索引。IE中类似的方法addRule().

(3)删除规则

deleteRule()方法:接收一个参数,要删除的规则的位置。IE中类似的方法:removeRule().

3. 元素大小
(1)偏移量
首先要介绍的属性涉及偏移量,包括元素在屏幕上占用的所有可见的空间。通过下列4个属性可以取得元素的偏移量。

  • offsetHeight: 元素在垂直方向上占用的空间大小,以像素计。包括元素的高度、(可见的)水平滚动条的高度、上边框高度和下边框高度。
  • offsetWidth: 元素在水平方向上占用的空间大小,以像素计。包括元素的宽度、(可见的)垂直滚动条的宽度、左边框宽度和右边框宽度。
  • offsetLeft: 元素的左外边框至包含元素的左内边框之间的像素距离。
  • offsetTop: 元素的上边框至包含元素的上内边框之间的像素距离。


(2)客户区大小
元素的客户区大小指的是元素内容及其内边距所占据的空间大小。有关客户区大小的属性有两个:clientWidth 和 clientHeight。

  • clientWidth 属性是元素内容区宽度加上左右内边距宽度;
  • clientHeight 属性是元素内容区高度加上上下内边距高度。


(3)滚动大小
滚动大小指的是包含滚动内容的元素的大小,以下是4个与滚动大小相关的属性。

  • scrollHeight: 在没有滚动条的情况下,元素内容的总高度。
  • scrollWidth: 在没有滚动条的情况下,元素内容的总宽度。
  • scrollLeft: 被隐藏在内容区域左侧的像素数。
  • scrollTop: 被隐藏在内容区域上方的像素数。


(4)确定元素大小
getBoundingClientRect()方法返回一个矩形对象,包含4个属性:left、top、right和bottom。这些属性给出了元素在页面中相对于视口的位置。

三、遍历

1. 遍历即使用NodeIterator或TreeWalker对DOM执行深度优先的遍历。

2. NodeIterator是一个简单的接口,只允许以一个节点的步幅前后移动,而TreeWalker在提供相同功能的同时,还支持在DOM结构的各个方向上移动,包括父节点,同辈节点和子节点等方向。

四、范围

范围是选择DOM结构中特定的部分,然后再执行相应操作的一种手段。

1. 使用范围选区可以在删除文档中某些部分的同时,保持文档结构的格式良好,或者复制文档中的相应部分。

2. IE8及更早版本不支持“DOM2级遍历和范围”模块,但它提供了一个专有的文本范围对象,可以用来完成简单的基于文本的范围操作。IE9完全支持DOM遍历。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值