美文网首页
2018-12-29

2018-12-29

作者: kathyever | 来源:发表于2018-12-29 17:30 被阅读0次

12.1.2 其他方面的变化

DOM的其他部分在“DOM2级核心”中也发生了一些变化。这些变化与XML命名空间无关,而是更倾向于确保API的可靠性及完整性

1、DocumentType类型的变化
DocumentType类型新增了3个属性:publicId、systemId和internalSubset。
publicId和systemId属性表示的是文档类型声明中的两个信息段,这两个信息段在DOM1级中时没有办法访问的

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">

//publicId是"-//W3C//DTD HTML 4.01//EN"
//而systemId是 "http://www.w3.org/TR/html4/strict.dtd"

最后一个属性internalSubset用于访问包含在文档类型声明中的额外定义:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
  [<!ELEMENT name(#PCDATA)>]>

访问document.doctype.internalSubset将得到"<!ELEMENT name(#PCDATA)>"。这种内部自己在HTML中极少用到,在XML中可能会更常见一些。

2、Document 类型的 变化

Document 类型的变化中唯一与命名空间无关的方法是importtNode()。这个方法的用途是从一个文档取得一个节点,然后将其导入到另一个文档,使其成为这个文档结构的一部分。
需要注意的是,每个节点都有一个ownerDocument属性,表示所属的文档。如果调用appendChild()时传入的节点属于不同的文档,则会导致错误。但是在调用importNode()时传入不同文档的节点则会返回一个新节点,这个新节点的所有权归当前文档所有

importNode()方法与Element的cloneNode()方法非常像素,它接受两个参数:要复制的节点和一个表示是否复制子节点的布尔值。
返回的结果是原来节点的副本,但能够在当前文档中使用。

var newNode = document.importNode(oldNode,true);//导入节点及其所有子节点
document.body.appendChild(newNode);

这个方法在HTML文档中并不常用,在XML文档中用的比较多

DOM2级视图模块添加了一个名为defaultView的属性,其中保存着一个指针,指向拥有给定文档的窗口。除IE之外所有浏览器都支持这个属性。不过在IE中有一个等价的属性名叫parentWindow。因此要确定文档的归属窗口,可以这么使用:

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

DOM2级核心还为document.implementation对象规定了两个方法:
1、createDocumentType():用于创建一个createDocumentType节点,接受3个参数:文档类型名称、publicId、systemId
由于既有文档的文档类型不能改变,因此createDocumentType()只在创建新文档时游泳。

2、createDocument():用于创建新文档,这个方法用到三个参数:针对文档中元素的namespaceURI、文档元素的标签名、新文档的文档类型
创建一个空的新XML文档:

var doc = document.implementation.createDocument("","root",null);

DOM2级HTML模块也为document.implementation新增了一个方法,名叫createHTML-Document()。这个方法的用途是创建一个完整的HTML文档,包括在<html><head><title>和<body>元素、这个方法只接受一个参数,即新创建文档的标题,返回新的HTML文档。

3、Node类型的变化

Node类型中唯一与命名空间无关的变化,就是添加了isSupported()方法。与DOM1级为document.implementation引入的hasFeature()方法类似,isSupported()方法用于确定当前节点具有什么能力。这个方法也接受相同的两个参数:特性名和特性版本号。如果浏览器实现了相应特性,而且能够基于给定节点执行该特性,isSupported()就返回true()。

if(document.body.isSupported("HTML","2.0")){
      //执行只有"DOM2级HTML"才支持的操作
}

DOM3引入了两个辅助比较节点的方法:isSameNode()和isEqualNode()。这两个方法都接受一个节点参数,并在传入节点与引用的节点相同或相等时返回true。
相同:指的是两个节点引用的是同一个对象
相等:指的是两个节点是相同的类型,具有相等的属性(nodeName、nodeValue),而且他们的attributes和childNodes属性也相等。

4、框架的变化
框架和内嵌框架分别用HTMLFrameElement和HTMLFrameElement表示,它们在DOM2级中都有一个新属性,名叫contentDocument。这个属性包含一个指针,指向表示框架内容的文档对象。

所有浏览器都支持contentWindow属性

相关文章

网友评论

      本文标题:2018-12-29

      本文链接:https://www.haomeiwen.com/subject/toxplqtx.html