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;
JavaScript高级程序设计31.pdf的更多相关文章
- JavaScript高级程序设计2.pdf
第三章 基本概念 区分大小写 ECMAScript中的一切(变量.函数名和操作符)都区分大小写 标识符 指变量.函数.属性的名字或者函数的参数 第一个字符必须是一个字母.下划线或美元符号,其它字符可以 ...
- JavaScript高级程序设计61.pdf
JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...
- JavaScript高级程序设计60.pdf
错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...
- JavaScript高级程序设计58.pdf
15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...
- JavaScript高级程序设计57.pdf
表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...
- JavaScript高级程序设计55.pdf
输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...
- JavaScript高级程序设计54.pdf
过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...
- JavaScript高级程序设计53.pdf
共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...
- JavaScript高级程序设计52.pdf
表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...
随机推荐
- ASP.NET中Json的处理
要使用.NET自带的JSON处理工具需要引用下面的命名空间: using System.Web.Script.Serialization; 1.编码 myConfig mc = new myConfi ...
- Redis的PHP操作手册(自用)
String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 $redis-> ...
- php图片上传代码
使用copy函数 if (!empty($_FILES)) { //图片 if(isset($_FILES['image'])) { $img_data = $_FILES['image']['tmp ...
- Nth Digit | leetcode
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note: n i ...
- JavaEE下载文件名不显示中文的问题
我们在做JavaEE项目下载文件时,在我们熟悉的UTF-8编码下经常会发现文件名中文乱码.中文不显示等状况,此时,将文 件名改一下编码或许会解决这个烦恼: fileName = new String( ...
- C++程序的编写和实现
C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...
- 在Eclipse中搭建C/C++环境
在Eclipse中搭建C/C++环境 本文地址:http://blog.csdn.net/you_and_me12/article/details/7389934 习惯了使用eclipse编程后,现在 ...
- python,django,mysql版本号查询
1. ubuntu 下如何查询子集的mysql版本: 方法一: 登录子集的mysql之后就会显示mysql版本: ***:~$ mysql -u root -p Enter password: Wel ...
- 使用jdk生成证书以及把证书导入到jdk中
证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...
- HDU 3308 LCIS 线段树区间更新
最近开始线段树一段时间了,也发现了不少大牛的博客比如HH大牛 ,小媛姐.这个题目是我在看HH大牛的线段树专题是给出的习题,(可以去他博客找找,真心推荐)原本例题是POJ3667 Hotel 这个题目 ...