版权声明:本文为博主原创文章。未经博主同意不得转载。 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;

 

全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展的更多相关文章

  1. 全栈JavaScript之路(十四)HTML5 中与class属性相关的扩充

    1. getElementByClassName() :支持getElementsByClassName()方法的浏览器有IE 9+.Firefox 3+.Safari 3.1+.Chrome 和 O ...

  2. 全栈JavaScript之路(十九)HTML5 插入 html标记 ( 一 )innerHTML 与outerHTML

    在须要给文档插入大量的html 标记下.通过DOM操作非常麻烦,你不仅要创建一系列的节点,并且还要小心地依照顺序把它们接结起来. 利用html 标签 插入技术,能够直接插入html代码字符串,简单.高 ...

  3. 全栈JavaScript之路(十八)HTML5 自己定义数据属性

    HTML5 规范规定,用户能够为元素 自己定义非标准属性, 可是要加入 data- 前缀. 目的是为元素提供与页面渲染无关的信息.或者语义信息.这些属性名能够任意加入,仅仅要带上前缀 data- 开头 ...

  4. 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化

    HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete'  //支持readyState 属性的浏 ...

  5. 全栈JavaScript之路(十)学习 DocumentFragment 类型 节点

    DocumentFragment 类型节点,代表一个文档片段,是一种轻量级的'文档' 对象.能够包括其他类型节点,并有能力訪问.操作当中的节点,可是在文档中没有文档标记,相当于是一个页面不可见的容器. ...

  6. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. “全栈2019”Java多线程第十四章:线程与堆栈详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  8. “全栈2019”Java异常第十四章:将异常输出到文本文件中

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  9. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 最新iOS发布App Store详细图文教程~

    网上有很多关于iOS发布上架的教程,但大多比较旧而且不完整.不够清晰.所以整理了一个详细完整的iOS APP发布上架App Store的图文教程.分享给小白到大神路上前进的你我. 上架iOS需要一个苹 ...

  2. 关于ionic中几个问题

    第一.每个页面的独立样式style标签不能写在ion-view外面,否则会出现路由问题,建议写在ion-content后面,例如下面的例子中,如果style但在ion-view中的话会出想路由问题,显 ...

  3. 使用UI Automation实现自动化测试--1

    Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active ...

  4. Linux vim命令记录

    Ndd  :删除N行 多行删除 :1,10d ctrl+v ,移动光标,ctrl+i,输入#,esc :移动处均会输入# gg:文档头 G:文档尾 o:下一行,并进入insert模式 O:上一行并输入 ...

  5. 【Excle数据透视表】如何将行字段中的某个项目拖动到第一行显示

    如下图:需要把上海放到第一显示 步骤 方法一: 单击"地区"下的"上海"→鼠标移动到单元格边框处→鼠标变成四向箭头→向上拖拽 方法二: 单击单元格A5→编辑区域 ...

  6. 【VBA】VBA编写的,将一列中相同的内容的行提取出来单独生成文件

    数据如上图所示,点击RUN后的运行结果如下: 得到该文件夹,文件夹内容如上图. 代码如下: Private Sub Command_OLIVER() Dim arr arr = Range(" ...

  7. 未能从程序集“Oracle.ManagedDataAccess”加载 “OracleInternal.Common.ConfigBaseClass”

    使用VS2015做项目的过程中一直使用的服务器上的oracle数据库,后来想学习一下oracle,就在本机安装了oracle.可没想到本来运行好好的项目,现在不能运行了.项目是使用的Abp框架,当运行 ...

  8. Android下 调用原生相机拍照摄像

    1 http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html 2 http://www.cnblogs.com/vir56k/ ...

  9. 遍历list,字典

    private void Form1_Load(object sender, EventArgs e) { List<int> ids = new List<int>(); i ...

  10. 【hadoop之翊】——windows 7使用eclipse下hadoop应用开发环境搭建

    由于一些缘故,这节内容到如今才写.事实上弄hadoop有一段时间了,能够编写一些小程序了,今天来还是来说说环境的搭建.... 说明一下:这篇文章的步骤是接上一篇的hadoop文章的:http://bl ...