• 全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展


    版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/hatmore/article/details/37658167

    (一)DocumentType 类型的变化新增三个属性: publicId,systemId,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.publicId,document.doctype.systemId,document.doctype.internalSubset ,能够訪问到。


    訪问document.doctype.internalSubset 将得到"<!ELEMENT name (#PCDATA)>"。

    这样的内部子集(internal subset)在HTML 中极少用到,在XML 中可能会更常见一些。



    (二)Document 类型与 xml命名无关的变化 的是。importNode() 方法。这种方法是从一个文档中取出一个节点。放到还有一文档。成为其一部分。

        须要注意的是,每个节点都有一个ownerDocument属生,假设用appendChild(node) 方法,传入的节点不是同一个文档的会报错。


    importNode()方法与cloneNode()方法非常像。接受两个參数,一个是要导入的几点,一个是个布尔值,表示是否要导入子节点。


    var newNode = document.importNode(oldNode,true)//导入全部子节点
    document.body.appendChild(newnode)


        在DOM2,视图模块 添加了一个唯一的属性,defaultView ,指向文档的窗体(或者框架)。在IE中有个等级的属性 parentWindow ,假设要确定文档的窗体:

    var parentWindow = document.defaultView || document.parentWindow



      除了  importNode()方法,defaultView 属性之外。还添加了两个方法: 

    document.implementation.createDocumentType(文档类型名称,publicId,systemId) ,因为既有的文档类型不能改动,所以仅仅能在创建新的文档的时候调用这种方法。

    document.implementation.createDocument(namaspaceURL,root,doctype);


    样例:

    var doctype = document.implementation.createDocumentType("html","-//W3C//DTD XHTML 1.0 Strict//EN","http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")

    var doc = document.implementation.createDocument("http://www.w3.org/1999/xhtml",
    "html", doctype);



    (三) Node 类型的变化 新增了一个 与 命名空间无关的方法, isSupported()方法 。与dom1 中的 document.hasFeature() 方法类似,确定当前节点拥有什么能力。

    只是。还是建议用能力检測。

    样例:

    if(document.body.isSupported('html','2.0')) {
      //...
    }

      DOM3 还为节点引用了isSameNode(), isEqualNode(),

    这两个方法都接受一个节点參数,并在传入节点与引用的节点同样或相等时返回true。

    所谓同样,指的是两个节点引用的是同一个对象。

    所谓相等,指的是两个节点是同样的类型。具有相等的属性(nodeName、nodeValue,等等),并且它们的attributes 和childNodes 属性也相等(同样位置包括同样的值)。

    DOM3 还针对 为Node 加入额外数据引入了新方法 setUserData(),该方法会把数据指定给节点,接受三个參数: 键,值。处理函数。

     

    document.body.setUserData("name","100",function(opration,key,value,srcNode,destNode){})

    然后用 var v alue = document.body.getUserData("name")  ,就取得了值。


    setUserData() ,的 回调函数,有5个參数,

    • 操作类型: 1复制。2导入,3删除。4重命名
    • 数据键
    • 数据值
    • 源节点
    • 目标节点

    传入setUserData()中的 处理函数 (回调函数)会在带有数据的节点被复制、删除、重命名或引入一个文档时调用,因而你能够事先决定在上述操作发生时怎样处理用户数据。


    (四) 框架的变化


    框架与内框架 分虽用 HTMLFrameElement, HTMLIframeElement 表示,他们在dom2 中都有一个新属性: contentDocument 

    var iframe = document.getElementById("myIframe");
    var iframeDoc = iframe.contentDocument; //IE8之前无效

    conentDocument 对象是 Document类型的实例,因此能够像使用document 对象一样使用它, 包括全部属性与方法。

    IE8 之前不支持 框架的 contentDocment属性,但支持 contentWindow 属性。

    因此:

    var iframe = document.getElementById("myIframe");
    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;


     

  • 相关阅读:
    如何快速部署Oracle Database
    有关Oracle统计信息的知识点
    索引的重建
    利用Openfiler配置基于文件系统的网络存储
    Linux命令(007) -- systemctl
    使用mysqldump导出数据库(表)
    文件处理.Windows.Fastcopy.3.50.x64.文件复制简体中文破解版(验证版)
    oracle 修改数据 保险方法
    oracle存储过程、声明变量、for循环--后期添加游标 if 、decode、 case when
    Oracle 游标使用全解
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10823447.html
  • Copyright © 2020-2023  润新知