其它方面的变化

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. hibernate细节一

    public void saveUser(){        Session session=JdbcUtil.getSession();        User user=new User();   ...

  2. session绑定线程

  3. overflow之锚点技术实现选项卡

    我们知道通过锚点技术可以实现页面内容的定位,如果我们把这些内容放置在一个容器中,看看我们能做什么.       艾玛,选项卡.轮播,有木有,瞬间有种蛋碎的赶脚,以前写个选项卡,破轮播,费了多大的劲儿呀 ...

  4. react组件什么周期记录,转的

    react 的核心除了虚拟DOM,我想还有一个很重要的就是生命周期函数,理解生命周期函数,对写出合理的commponet很有帮助.下面总结一下我对生命周期函数的一些理解已经在项目过程中遇到的一些问题. ...

  5. 浅谈.prop() 和 attr() 的区别

    今天编码时遇到一个问题,通过后台查询的数据设置前端checkbox的选中状态,设置选中状态为.attr('checked','true');没有问题,但是当数据重新加载时,checkbox应清空即所有 ...

  6. sql日期函数

    1.sql常用日期函数 当我们在进行数据处理的时候,常常需要用到日期函数的计算,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.只要数据包含的只是日期部分,运行查询就不会出问题. ...

  7. PHP — php精粹-编写高效的php代码 --- API

    1.数据格式 (1)json 示例代码: $jsonData = '[{"title":"The Magic Flute","time":1 ...

  8. eclipse 启动 出现Failed to create the Java Virtual Machine" 解决方案

    方法如下: 找到eclipse目录下的eclipse.ini,可以看到如下内容:-startupplugins/org.eclipse.equinox.launcher_1.1.0.v20100507 ...

  9. usb host和usb device

    S3C2440的数据手册将USB功能分为两章--usb host和usb device.具体什么意思呢? usb host: 微处理器作为usb主设备,可以挂接U盘之类的从属设备. usb devic ...

  10. Entity Framework: 视图查询时重复返回第一行值, duplicate frst rows in resultset from a view

    http://blog.csdn.net/riverlau/article/details/7476449 1. 使用rownumber给view加上一个标示列 SELECT ROW_NUMBER() ...