其它方面的变化

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;

JavaScript高级程序设计31.pdf的更多相关文章

  1. JavaScript高级程序设计2.pdf

    第三章 基本概念 区分大小写 ECMAScript中的一切(变量.函数名和操作符)都区分大小写 标识符 指变量.函数.属性的名字或者函数的参数 第一个字符必须是一个字母.下划线或美元符号,其它字符可以 ...

  2. JavaScript高级程序设计61.pdf

    JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...

  3. JavaScript高级程序设计60.pdf

    错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...

  4. JavaScript高级程序设计58.pdf

    15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...

  5. JavaScript高级程序设计57.pdf

    表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...

  6. JavaScript高级程序设计55.pdf

    输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...

  7. JavaScript高级程序设计54.pdf

    过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...

  8. JavaScript高级程序设计53.pdf

    共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...

  9. JavaScript高级程序设计52.pdf

    表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...

随机推荐

  1. 项目中logger、message错误信息的配置

    申明:在一个项目中必不可少的是Logger和错误信息的配置,现在给出在我们常用的处理方法. —.创建一个ConfigUtils类和他对应的rah.properties文件和Test测试类 Config ...

  2. 为什么aspx这么“慢”

    首先你要明白什么viewstate:由系统生成的一个隐藏域,用来进行页面状态保持的 里面存放着关于判断页面是否提交的Ispostback,和一些关于服务器控件的状态和数据: (说明下 ,ViewSta ...

  3. tomcat server.xml配置文件 解析

      把服务拆分出来了.      前几天我也进行了拆分.可是当时服务起不来所以我想会不会有什么设置,使得这个服务在主机中只能启一个.然后我又找了一台服务器,也把代码放了进去.结果仿佛是我料想到的样子, ...

  4. 认识linux权限

    首先,我们来了解下linux系统的用户和用户组 场景:公司里有两个项目组:小组A和小组B:A.B.C是小组A的成员,甲.乙是小组B的成员.为了保密起见,小组内的进度.文档.程序都有小组内公开.比如小组 ...

  5. php内存申请和销毁

    内存申请 ZendMM使用自身heap层申请内存追踪结果: ZEND_ASSIGN_SPEC_CV_CONST_HANDLER (......) -> ALLOC_ZVAL(......) -& ...

  6. c# .net使用SqlDataReader注意的几点

    转自:http://blog.knowsky.com/258608.htm 1.当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用 ...

  7. asp.net core 认证及简单集群

    众所周知,在Asp.net WebAPI中,认证是通过AuthenticationFilter过滤器实现的,我们通常的做法是自定义AuthenticationFilter,实现认证逻辑,认证通过,继续 ...

  8. Http 状态码详解

    状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...

  9. java中关于移位运算符的demo与总结

    首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种. << 左移运算符,表示将左边的操作数的二进制数据向左移动*位,移动后空缺位以0 ...

  10. jquery之ajaxfileupload异步上传插件

    点我下载工程代码由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/d ...