版权声明:本文为博主原创文章。未经博主同意不得转载。 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. Nginx限制连接和请求

    一.ngx_http_limit_conn_module对同一个ip/server的连接数做限制.配置指令:limit_conn_zone语法: limit_conn_zone $variable z ...

  2. MySQL的查询,子查询,联结查询,联合查询

    MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...

  3. keycode值大全

    13 我们只知道13是回车,主要是其他的也不是很常用,所以不用记. keycode 8 = BackSpace BackSpace   keycode 9 = Tab Tab   keycode 12 ...

  4. UIScrollView翻书效果

    代码地址如下:http://www.demodashi.com/demo/12695.html 前言:看到凤凰新闻 头条栏目的编辑推荐新闻是这个效果,觉得不错,就想着实现一下,以下就是我的实现过程. ...

  5. Application provided invalid, non monotonically increasing dts to muxer in stream

    很多同学在使用Ffmpeg过程中都遇到Application provided invalid, non monotonically increasing dts to muxer in stream ...

  6. Android 完整开源应用大全,完整开源项目

    (Antox)聊天的  (new) (OpenKeychain)OpenPGP在android上的实现  (new) (Flock)提供同步服务 (OpenFlappyBird)以前火爆的坑爹鸟 (F ...

  7. python .py .pyc .pyw .pyo .pyd区别

    .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行.当然,也可用文本编辑器进行修改. .pyc 文件 以 .pyc 作扩展名的文件是 ...

  8. Memcahed服务异常监控脚本

    #!/bin/sh # filename: mon_mc.sh export MemcahedIp=$1export MemcahedPort=$2export NcCmd="nc $Mem ...

  9. Junit使用教程(三)

    四.实例总结 1. 参数化测试 有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测试来解决这个 ...

  10. struts2 拦截器,使用spring注入

    ActionContext actionContext = invocation.getInvocationContext();ServletContext context = (ServletCon ...