- 浏览: 69419 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
LeeYee:
zz894571429 写道我把你的oxcow-MsgBox- ...
基于jQuery的简单消息框MsgBox插件 -
zz894571429:
我把你的oxcow-MsgBox-jQuery的js,封装到我 ...
基于jQuery的简单消息框MsgBox插件 -
xiaoxiaozhu:
基于jQuery的简单消息框MsgBox插件 -
liujun58love:
不错,学习了,有机会研究研究。感谢楼主分享
【HTML5活动】HTML5 Canvas实现贪吃蛇
前几天了解了下javascript对于xml解析的一些知识,在这里稍作记录下。这里主要对针对IE、Mozilla进行相关代码编写及测试,不涉及chrome浏览器,因此可能在chrome浏览器相关代码无法正常工作。期间参考了《JavaScript高级程序设计》第15章中的相关知识。
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", file, false);
xmlhttp.send(null);
xmlDoc = xmlhttp.responseXML.documentElement;
IE通过ActiveXObject实现针对xml文档的操作,而Mozilla则通过 document.implementation.createDocument对象实现对xml文档的操作。同时IE提供了load及loadXML两个方法访问xml,而Mozilla只提供了load方法进行。我们可以通过改造Mozilla的相关对象实现与IE相同的loadXML方法。
这里要说明的是在创建好xml文档操作的对象后,默认读取xml的模式为异步即async = true;
当async = true即异步模式时,javascript代码不会等待xml文档完全载入后才继续执行代码,那么就可能会出现在使用xml文档对象时,文档还尚未被完全载入的情况。同时IE与Mozilla处理异步模式的方式也不同:
1、针对IE,异步载入文件时,会使用readyState属性和触发onreadystatechange事件处理函数;readyState属性的说明如下:
0——DOM尚未初始化任何信息;
1——DOM正在载入数据;
2——DOM完成了数据载入;
3——DOM已经可用,不过某些部分可能还不能用;
4——DOM已经完全被加载,可以使用;
2、针对Mozilla,异步载入时,同样会使用readyState属性,但触发的是onload事件处理函数;但readyState属性的定义不同
‘loading’——DOM尚在载入数据;
‘complete’——DOM完成加载,可以使用;
那么当使用异步模式时,针对xml文档的处理就应该放在相应的事件处理函数中及readyState标识为完成加载时,而不应该紧接着load方法之后。
当async = false即异步模式时,可以不用考虑上述问题,因为这时候只有文档已经被完全载入后,javascript才会继续执行后面的代码;
针对以上两个问题,显而易见,为了使用javascript对xml文档的操作是要考虑浏览器的。为此可以创建以下代码:
- function XmlDom() {
- if (window.ActiveXObject) {
- try {
- var oXmlDom = new ActiveXObject( "Microsoft.XMLDOM" );
- oXmlDom.async = false ;
- return oXmlDom;
- } catch (oError) {
- oError.reason;
- }
- throw new Error( "MSXML is not installed on you system." );
- } else if (document.implementation
- && document.implementation.createDocument) {
- var oXmlDom = document.implementation.createDocument( "" , "" , null );
- oXmlDom.addEventListener("load" , function () {
- this .__changeReadyState__();
- }, false );
- /*
- * 设置为同步模式,使其在调用 load 方法完成对xml文档的读入后在继续进行其他操作<br/>
- * 如果设置为异步模式,则在使用 oXmlDom 对象前首先判断xml文档是否已经加载完成。<br/>
- * xml文档加载完成的标志是:<br/>
- * 1、在 IE 中 oXmlDom 对象的 readyState 属性等于4时;
- * 2、在 Mozilla 中 oXmlDom 对象的 readyState 属性等于 'complete' 时;
- */
- oXmlDom.async = true ;
- return oXmlDom;
- } else {
- throw new Error( "Your browser doesn't support an XML DOM object." );
- }
- }
- if (Document) { //这里偷懒了,需要判断是否是Mozilla
- Document.prototype.onreadystatechange = null ;
- Document.prototype.__changeReadyState__ = function () {
- if ( typeof this .onreadystatechange == 'function' ) {
- this .onreadystatechange();
- }
- };
- Document.prototype.loadXML = function (sXml) {
- var oParser = new DOMParser();
- var oXmlDom = oParser.parseFromString(sXml, "text/xml" );
- while ( this .firstChild) {
- this .removeChild( this .firstChild);
- }
- for ( var i = 0; i < oXmlDom.childNodes.length; i++) {
- var oNewNode = this .importNode(oXmlDom.childNodes[i], true );
- this .appendChild(oNewNode);
- }
- };
- Document.prototype.__load__ = Document.prototype.load;
- Document.prototype.load = function (sURL) {
- this .__load__(sURL);
- };
- // 为节点定义xml获取函数,使其节点可以直接使用方法.xml
- // __defineGetter__方法只在 Mozilla中定义
- Node.prototype.__defineGetter__("xml" , function () {
- var oSerializer = new XMLSerializer();
- return oSerializer.serializeToString( this , "text/xml" );
- });
- }
测试代码如下:
测试1、当使用同步模式时
- function test() {
- var oXmlDom = XmlDom();
- oXmlDom.async = false ;
- oXmlDom.load("exam1.xml" );
- alert(oXmlDom.xml);
- }
测试2、当使用异步模式时
- function test() {
- var oXmlDom = XmlDom();
- oXmlDom.async = true ;
- oXmlDom.onreadystatechange = function () {
- //IE|FF
- if (oXmlDom.readyState == 4 || oXmlDom.readyState == "complete" ) {
- alert(oXmlDom.xml);
- }
- }
- oXmlDom.load("exam1.xml" );
- }
如果异步模式时仍使用测试1的代码,将不会得不到任何返回值;
csdn地址:http://blog.csdn.net/oxcow/archive/2010/06/06/5650937.aspx
发表评论
-
【译】jQuery插件编写
2012-12-02 20:19 1251最新内容请查看:http://leeyee.github.i ... -
jQuery eTable Plugin
2012-10-15 13:56 1002最新内容请查看:http://leeyee.github. ... -
ECMAScript中原始类型Null和Undefined小结
2012-07-16 15:40 933请移步访问:http://leeyee.github.io/ ... -
基于jQuery的简单消息框MsgBox插件
2012-06-10 10:10 10783最新内容请查看:http://leeyee.github.i ... -
【HTML5活动】HTML5 Canvas实现贪吃蛇
2011-11-26 16:10 2484活动地址:http://html5.group.iteye.c ... -
js表格字段排序
2008-09-20 23:33 7851.比较函数生成器: /** * 比较函数生成器 ... -
js实现身份证号码验证
2009-05-08 22:09 741文章最新地址请访问:http://leeyee.github ... -
js检测浏览器版本
2009-08-24 21:47 768最新地址请查看:http://leeyee.github.i ... -
实现调用window.close()关闭窗口时IE不提示
2009-08-24 22:13 1098请查看最新地址:http://leeyee.github.i ... -
javascript 贪吃蛇(一)
2010-03-31 11:00 698snake怎么玩,这里就不做介绍,大家都应该知道。写这篇东西 ... -
javascript 贪吃蛇(二)
2010-03-31 11:56 687在javascript 贪吃蛇(一 ... -
javascript 贪吃蛇(三)【附带源码】
2010-03-31 19:24 882在javascript 贪吃蛇(一 ... -
javascript 最佳实践
2010-04-07 15:58 714首次尝试翻译,如有理解错误还请指正。原文出自http://ww ... -
javascript俄罗斯方块【附带源码】
2010-04-19 14:55 744在看了W3C的关于ECMScript的对象及继承后,先是完成贪 ... -
javascript省市地区联动【素材】
2010-09-12 11:54 900资源源码下载地址:http://download.csdn.n ... -
一些关于javascript、jQuery使用时的建议
2011-04-09 11:53 759最新内容请查看:http:/ ... -
javascript XPath 实现【补充】
2010-06-07 14:23 1708在昨天参照《JavaScript高级程序设计》第15章后,针对 ... -
javascript XPath 实现
2010-06-06 16:26 4533关于XPath的相关知识可以参看http://www.w3sc ...
相关推荐
MSXML与JavaScript语言技术进行XML编程 ,讲述JavaScript生成DOM文档对象的方法
在前台页面调用javascript,读写XML文件
javascript 对xml文件解析 解决大家常见的javascript对xml文件解析问题
javaScript解释XML文件,解释获取XML文件节点的值
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
关于javascript读取xml文件的,有需要的朋友可以下载
Javascript读取XML Javascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript读取XMLJavascript...
javascript操作xml文件示例代码,包括增删改查等操作
js读取Xml文件内容.zip
利用javascript读取XML的一些方法的总结。
有一个javascript,还有一个xml文件,javascript把xml文件解析成html。
用JavaScript对xml字符串的操作,花了好长时间才从网上找到资料,写出来的啊。下载后还得需要jquery包需要自己引入。
Nodejs 读写XML文件实例,代码使用Javascript,可以在服务器端程序使用。
Javascript解析服务器端XML文件,成为一个树形菜单,自己工作中需要写的,想和同志们一起探讨探讨
本文阐述了基于XML 的数据检索技术, 并介绍了DOM 对XML 文档的操作。最后通 过例子实现用Javascript 的DOM 对XML 文档节点进行检索, 检索结果用XML 数据岛在HTML 页面 中显示。
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。 AJAX 是一种在 2005 年由 Google 推广开来的编程模式。 AJAX 不是一种新的编程语言,而是一种使用现有标准的新方法。 通过 AJAX,你可以创建更...
一个很好的学习javaScript对xml文件的增删改的例子
javascript xml操作函数,装载xml文件,将字符串转换为xml; XML.load //同步加载xml XML.loadAsync //异步加载xml XML.parse //将文本转换成xml
JAVASCRIPT加载XML文档及操作XML文档的方法[归类].pdf
前台需要的一些帮助文档HTML+CSS+JavaScript+XML等的帮助文档