• JavaScript高级程序设计31.pdf


    其它方面的变化

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

    DocumentType类型的变化

    DocumentType类型新增了3个属性:publicId、systemId和internalSubset

    其中前两个属性表示的是文档类型声明中的两个信息段,这两个信息段在DOM1级中没有办法访问到

    alert(document.doctype.publicId);  //文档类型声明PUBLIC后的字符串

    alert(document.doctype.systemId);  //文档类型声明"http"的字符串

    访问document.doctype.internalSubset将得到"<!ELEMENT name (#PCDATA)>"这种内部子集很少用到

    Document类型的变化

    Document类型的变化中唯一与命名空间无关的方法是importNode(),这个方法的用途是从一个文档中取得一个节点,然后将其导入到另一个文档,使其成为这个文档结构的一部分,需要注意的是,每个节点都有一个ownerDocument属性(不同文档ownerDocument属性的值不一样)。如果调用appendChild()时传入的节点属于不同文档(ownerDocument属性的值不一样),则会导致错误,它接受2个参数:要复制的节点和一个是否复制子节点的布尔值,返回一个节点副本

    var newNode=document.importNode(oldNode,true);

    document.body.appendChild(newNode);

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

    “DOM2级视图”模块添加了一个名为defaultView的属性,其中保存着一个指针,指向拥有给定文档的窗口,除IE外所有浏览器支持这个属性,IE中有一个等价的属性名parentWindow(opera也支持这个属性)

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

    DOM2级核心还为document.implementation对象规定了两个新方法:createDocumentType()和createDocument(),前者用于创建一个新的DocumentType节点,接收3个参数:文档类型名称、publicId、systemId,由于既有文档的文档类型不能改变,因此createDocumentType()只在创建新文档时有用;创建新文档需要用到createDocument()方法,接收3个参数:针对文档中元素的namespaceURI、文档元素的标签名、新文档的文档类型(就是介绍的上一个属性)

    //创建一个空的新XML文档

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

    这行代码创建一个没有命名空间的新文档,文档元素为<root>,没有指定文档类型

    “DOM2级HTML”模块也为document.implementation新增一个方法:createHTMLDocument(),用途是创建一个完整的HTML文档,包括<html><head><title><body>元素,接收一个参数,即新创建的文档的标题(<title>元素里的字符串),返回新的HTML文档,只有Opera和Safari支持这个方法

    Node类型的变化

    Node类型中唯一与命名空间无关的变化,就是添加了isSupported()方法,与DOM1级为document.implementation引入的hasFeature()方法类似,用于确定当前节点具有什么能力,接收2个参数:特性名和特性版本号,返回true或false

    if(document.body.isSupported("HTML","2.0")){

          //执行操作

          }

    不推荐,最好使用能力检测

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

    var div1=document.createElement("div");

    div1.setAttribute("class","box");

    var div2=document.createElement("div");

    div2.setAttribute("class","box");

    alert(div1.isSameNode(div1));  //true

    alert(div1.isEqualNode(div2));  //true

    alert(div1.isSameNode(div2));  //false

    DOM3级为DOM节点添加额外数据引入了新方法:setUserData()将数据指定给节点,接收3个参数 要设置的键、实际的数据(可以是任何数据类型)和处理函数

    document.body.setUserData("name","Nicholas",function(){});

    //使用getUserData()传入相同的键,就可以取得该数据

    var value=document.body.getUserData("name");

    传入setUserData()中的处理函数会在带有数据的节点被复制、删除、重命名或引入一个文档时调用,这个函数函数接收5个参数:表示操作类型的数值(1表示复制、2表示导入、3表示删除、4表示重命名)、数据键、数据值、源节点和目标节点。在删除节点时,源节点是null,在复制节点时,目标节点是null

    可以采用  if(操作类型的数值==1){}这样的形式操作节点

    框架的变化

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

    这个属性在IE8之前的版本无效,但所有浏览器都支持contentWindow属性(该属性返回框架的window对象,而这个window对象又有一个document属性),所以

    var iframe=document.getElementById("myIframe");

    var iframeDoc=iframe.contentDocument||iframe.contentWindow.document;

  • 相关阅读:
    Mybatis
    spring2
    servlet
    MyBatis1
    Docker容器保存为镜像文件并发布到DockerHub上
    【JS】提取字符串中的分数,汇总后算出平均分,并与每个分数比较,输出
    CentOS下创建管理员权限用户
    Centos安装文件传输软件rz sz
    2022年的零日漏洞影响了哪些平台?
    关于渗透测试的优缺点,你知道吗?
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/3762319.html
Copyright © 2020-2023  润新知