1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>DOM 变化(dom2和dom3)</title> 6 </head> 7 <body> 8 9 </body> 10 <script> 11 12 /* 13 DOM2 和 DOM3 级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的 XML 特性。为此,DOM2 和 DOM3级分为许多模块(模块之间具有某种关联), 14 分别描述了 DOM 的某个非常具体的子集。这些模块如下。 15 DOM2 级核心(DOM Level 2 Core):在 1 级核心基础上构建,为节点添加了更多方法和属性。 16 DOM2 级视图(DOM Level 2 Views):为文档定义了基于样式信息的不同视图。 17 DOM2 级事件(DOM Level 2 Events):说明了如何使用事件与 DOM 文档交互。 18 DOM2 级样式(DOM Level 2 Style):定义了如何以编程方式来访问和改变 CSS 样式信息。 19 DOM2 级遍历和范围(DOM Level 2 Traversal and Range):引入了遍历 DOM 文档和选择其特定部分的新接口。 20 DOM2 级 HTML(DOM Level 2 HTML):在 1 级 HTML 基础上构建,添加了更多属性、方法和新接口。 21 可以通过下列代码来确定浏览器是否支持这些 DOM 模块。 22 var supportsDOM2Core = document.implementation.hasFeature("Core", "2.0"); 23 var supportsDOM3Core = document.implementation.hasFeature("Core", "3.0"); 24 var supportsDOM2HTML = document.implementation.hasFeature("HTML", "2.0"); 25 var supportsDOM2Views = document.implementation.hasFeature("Views", "2.0"); 26 var supportsDOM2XML = document.implementation.hasFeature("XML", "2.0"); 27 28 * */ 29 /* 30 Node 类型的变化:增加了命名空间; 31 Document 类型的变化:包含了与命名空间有关的方法。只有在文档中存在两个或多个命名空间时,这些与命名空间有关的方法才是必需的。 32 Element 类型的变化:与命名空间有关 33 NamedNodeMap 类型的变化:与命名空间有关 34 * */ 35 /* 36 其他方面的变化: 37 DocumentType 类型新增了 3 个属性:publicId、systemId 和 internalSubset。其中,前两个属性表示的是文档类型声明中的两个信息段, 38 这两个信息段在 DOM1 级中是没有办法访问到的。 39 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 40 对这个文档类型声明而言,publicId是"-//W3C//DTD HTML 4.01//EN",而systemId是"http: 41 //www.w3.org/TR/html4/strict.dtd"。在支持 DOM2 级的浏览器中,应该可以运行下列代码。 42 alert(document.doctype.publicId); 43 alert(document.doctype.systemId); 44 实际上,很少需要在网页中访问此类信息。最后一个属性 internalSubset,用于访问包含在文档类型声明中的额外定义,以下面的代码为例。 45 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 46 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 47 [<!ELEMENT name (#PCDATA)>] > 48 访问 document.doctype.internalSubset 将得到"<!ELEMENT name (#PCDATA)>"。这种内部 49 子集(internal subset)在 HTML 中极少用到,在 XML 中可能会更常见一些。 50 51 Document 类型的变化 52 Document 类型的变化中唯一与命名空间无关的方法是 importNode()。这个方法的用途是从一个文档中取得一个节点,然后将其导入到另一个文档, 53 “DOM2 级视图”模块添加了一个名为 defaultView 的属性,其中保存着一个指针,指向拥有给定文档的窗口(或框架)。 54 “DOM2级核心”还为 document.implementation 对象规定了两个新方法:createDocumentType()和 createDocument()。前者用于创建一个新的 DocumentType节点. 55 “DOM2 级 HTML”模块也为 document.implementation 新增了一个方法,名叫 createHTMLDocument()。这个方法的用途是创建一个完整的 56 HTML 文档,包括<html>、<head>、<title>和<body>元素。这个方法只接受一个参数,即新创建文档的标题(放在<title>元素中的字符串),返回新的 HTML 文档. 57 3. Node 类型的变化:Node 类型中唯一与命名空间无关的变化,就是添加了 isSupported()方法。与 DOM1 级为 document.implementation引入的 hasFeature()方法类似, 58 isSupported()方法用于确定当前节点具有什么能力。 59 DOM3 级引入了两个辅助比较节点的方法:isSameNode()和 isEqualNode()。 60 DOM3 级还针对为 DOM 节点添加额外数据引入了新方法。其中,setUserData()方法会将数据指定给节点 61 4. 框架的变化:略 62 * */ 63 </script> 64 </html>