第11章 DOM2 和 DOM3 (一)

 

DOM1级主要定义的是 HTML 和 XML 文档的底层结构。DOM2 和 DOM3 级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的 XML 特性。为此,DOM2 和 DOM3 级分为许多模块 (模块之间具有某种关联),分别描述了 DOM 的某个非常具体的子集。这些模块如下:

  • DOM2级核心 (DOM Level 2 Core): 在1级核心基础上构建,为节点添加了更多方法和属性;
  • DOM2级视图 (DOM Level 2 Views): 为文档定义了基于样式信息的不同视图;
  • DOM2级事件 (DOM Level 2 Events): 说明了如何使用事件与 DOM 文档交互;
  • DOM2级样式 (DOM Level 2 Style): 定义了如何以编程方式来访问和改变 CSS 样式信息;
  • DOM2级遍历和范围 (DOM Level 2 Traversal and Range): 引入了遍历 DOM 文档和选择其特定部分的新接口;
  • DOM2级HTML (DOM Level 2 HTML): 在1级HTML基础上构建,添加了更多属性、方法和新接口。
本章探讨除 "DOM 2级事件" 之外的所有模块,“DOM2级事件” 模块将在第12章进行全面讲解。
DOM3级又增加了 "XPath" 模块和 "加载与保存" (Load and Save) 模块。这些模块将在第15章讨论。

11.1 DOM 变化

DOM2级和3级的目的在于扩展DOM API,以满足操作XML的所有需求,同时提供更好的错误处理及特性检测能力。从某种意义上讲,实现这一目的很大程度意味着对命名空间的支持。 "DOM2级核心" 没有引入新类型,它只是在 DOM1级的基础上通过增加新方法和新属性来增强了既有类型。“DOM3级核心”同样增强了既有类型,但也引入了一些新类型。
类似地,"DOM2级视图" 和 “DOM2级HTML”模块也增强了DOM接口,提供了新的属性和方法。由于这两个模块很小,因此我们将把它们与 "DOM2级核心"放在一起,讨论基本 JavaScript 对象的变化。可以通过下列代码来确定浏览器是否支持这些 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 级模块。其他浏览器的支持情况也各异。本章只讨论那些已经有浏览器实现的部分,任何浏览器都没有实现的部分将不作讨论。

11.1.2 其他方面的变化

2.Document 类型的变化
“DOM2级视图” 模块添加了一个名为 defaultView 属性,其中保存着一个指针,指向拥有给定文档的窗口 (或框架)。除此之外,"视图" 规范没有提供什么其他可用的信息,因而这是唯一一个新增的属性。除IE之外的所有浏览器都支持 defaultView 属性。在 IE 中有一个等价的属性名叫 parentWindow (Opera 也支持这个属性)。因此,要明确文档的归属窗口,可以使用以下代码:
var parentWindow = document.defaultView || document.parentWindow;
4.框架的变化
框架和内嵌框架分别用 HTMLFrameElement 和 HTMLIFrameElement 表示,它们在 DOM2级中都有了一个新属性,名叫 contentDocument 。这个属性包含一个指针,指向表示框架内容的文档对象。在此之前,无法直接通过元素取得这个文档对象 (只能使用 frames 集合)。可以像下面这样使用这个属性:
var iframe = document.getElementById("myIframe");
var iframeDoc = iframe.contentDocument;                     // 在 IE 中无效
由于 contentDocument 属性是 Document 类型的实例,因此可以像使用其他 HTML 文档一样使用它,包括所有属性和方法。Opera、Firefox、Safari 和 Chrome 支持这个属性。 IE8之前不支持框架中的 contentDocument 属性,但支持一个名叫 contentWindow 的属性,该属性返回框架的 window 对象,而这个 window 对象又有一个 document 属性。因此,要想在上述所有浏览器中访问内嵌框架的文档对象,可以使用下列代码:
var iframe = document.getElementById("myIframe");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
所有浏览器都支持 contentWindow 属性。
访问框架或内嵌框架的文档对象要受到跨域安全策略的限制。如果每个框架中的页面来自其他域或不同子域,或者使用了不同的协议,那么要访问这个框架的文档对象就会导致错误。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值