Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化
我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知
但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解
这里就只讲一下DOM2和DOM3的背景来历
首先DOM1级主要定义的是HTML和XML文档底层的结构,DOM2和DOM3两个级别则主要致力于为文档引入更加丰富的交互能力
与此同时这两个版本也支持了更加高级的XML特性
首先DOM2分为了许多模块
如下所示:
1. DOM2级核心
2.DOM2级视图
3.DOM2级事件
4.DOM2级样式
5.DOM2级遍历和范围
6.DOM2级HTML
以上板块的内容在致力于拓展DOM API的同时也提供了更好的错误处理及特性检测的能力
这一目的在一定程度上意味着对命名空间的支持
而通过命名空间我们则可以在同一文档中混入不同的文档类型的代码
总的来说
DOM2没有引入新的类型而是在已有类型的基础上添加新的方法以增强现有类型的能力
而DOM3既增强了已有类型的能力,也引入了新的类型
下面我们来看看这些变化
Node类型的变化
在DOM2级中,Node类型包含以下特定于命名空间的属性
localName:不带命名空间前缀的节点名称
namespaceURI:命名空间的URI或者null(未指定的情况下)
prefix:命名空间前缀或者null(未指定的情况下)
PS.当节点使用了命名空间的时候,Node的 nodeName 则等于 prefix : localname
nodeName则相当于 tagName
以 <s:svg> 为例:nodeName为 s:svg prefix为s localName为svg
在此基础上DOM3级则更进一步,引入了如下与命名空间有关的方法:
isDefaultNamespace(nameSpaceURI): 判断指定的URI是否为当前节点的默认命名空间
lookupNamespaceURI(prefix):返回给定前缀的命名空间
lookupPrefix(namespaceURI):返回给定namespaceURI的前缀
Document类型的变化
DOM2中 Document 类型包含了下列与命名空间有关的方法:
createElementNS(namespaceURI,tagName):创建属于namespaceURI命名空间的指定元素
createAttributeNS(namespaceURI,attributeName):创建属于namespaceURI命名空间的新特性
getElementsByTagNameNS(namespaceURI,tagname):返回属于指定命名空间的nodeList集合
只有当一个文档中存在多个命名空间时,以上方法才是必要的
Element类型的变化
新增操作特定命名空间特性的API
新增方法如下:
getAttributeNS(namespaceURI,localName):获取指定命名空间的指定特性
getAttributeNodeNS(namespaceURI,localName):取得指定命名空间的指定特性节点
hasAttributeNS(namespaceURI,localName):判断当前元素是否拥有属于指定命名空间的指定特性
removeAttributeNS(namespaceURI,localName):移除指定命名空间的指定特性
setAttributeNS(namespaceURI,localName,value):将指定命名空间的指定特性的值设置为value
setAttributeNodeNS(namespaceURI,attrnode):设置指定命名空间的指定特性节点为attrnode
NamedNodeMap类型的变化
同样的针对于特性节点的NamedNodeMap类型也提供了与命名空间相关的方法
getNamedItemNS(namespaceURI,localName):取得指定空间名为localName的项
removeNamedItemNS(namespaceURI,localName):移除指定空间名为localName的项
setNamedItemNS(node):添加已经事先设置命名空间的node
其它方面的变化
除了上述与命名空间相关的变化之外
DOM2、3还有以下变化:
1.DocumentType新增了三个属性:publicId、systemId、internalSubset 用于访问文档信息声明
2.importNode(要复制的节点,是否深拷贝):从一个文档中获取节点并导入另一个文档
3.document.implementation 添加了两个方法 createDocumentType、createDocument 用于创建文档以及创建文档类型声明
4.对Node添加 isSupported()方法,用于判断node是否实现了某一特性
5.isSameNode(node) 判断当前节点是否与Node相同
6.isEqualNode(node)判断当前节点是否与Node相等
7.setUserData(要设置的键,设置的值,处理函数)用于给DOM节点添加额外的数据属性
第三个参数的处理函数接收五个参数:操作类型的数值、数据键、数据值、源节点、目标节点 而这个处理函数将会在DOM节点被clone时调用,若不在处理函数中进行处理,那么克隆节点将不会复制节点数据
8.frame.contentDocument 指向表示框架内容的文档对象(该属性受同源策略的限制)