javascript生成/解析dom的CDATA类型的字段的代码


Posted in Javascript onApril 22, 2007

两段demo代码如下(for ie only):
<script type="text/javascript">  
//demo1
var  xmlDoc  =  new  ActiveXObject("Msxml2.DOMDocument");  
var  root;  
var  CDATASection;  
xmlDoc.async  =  false;  
xmlDoc.loadXML("<a/>");  
root  =  xmlDoc.documentElement;  
CDATASection  =  xmlDoc.createCDATASection("Hello  World!");  
root.appendChild(CDATASection);  
b=xmlDoc.createElement("Test")  
b.text="hahahahaha"  
root.appendChild(b);  
alert(root.xml);    
for(i  =0;i<root.childNodes.length;i++)  
{  
if(root.childNodes[i].nodeType==4)  
alert(root.childNodes[i].nodeValue)  
}  
</script>

<script type="text/javascript">  
//demo2
var  xmlDoc  =  new  ActiveXObject("Msxml2.DOMDocument");   
xmlDoc.async  =  false;  
xmlDoc.loadXML("<a><![CDATA[aaaaaaaaaaaaaaaaaaaaa]]></a>");  
root  =  xmlDoc.documentElement;   
for(i  =0;i<root.childNodes.length;i++)  
{  
if(root.childNodes[i].nodeType==4)  
alert(root.childNodes[i].nodeValue)  
}  
</script> 
//demo3( for firefox)
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
< HTML > 
< HEAD > 
< TITLE >  使firefox对xml的处理兼容IE的selectSingleNode selectNodes方法  </ TITLE > 
< META  NAME ="Author"  CONTENT ="emu" > 
< META  NAME ="Keywords"  CONTENT ="firefox IE selectSingleNode selectNodes" > 
< META  NAME ="Description"  CONTENT ="使firefox可以支持selectSingleNode selectNodes方法" > 
< SCRIPT  LANGUAGE ="JavaScript" > 
<!-- 
var  isIE  =   !! document.all;

function  parseXML(st){
     if (isIE){
         var  result  =   new  ActiveXObject( " microsoft.XMLDOM " );
        result.loadXML(st);
    } else {
         var  parser  =   new  DOMParser();
         var  result  =  parser.parseFromString(st,  " text/xml " );
    }
     return  result;
}

if ( ! isIE){
     var  ex;
    XMLDocument.prototype.__proto__.__defineGetter__( " xml " ,  function (){
         try {
             return   new  XMLSerializer().serializeToString( this );
        } catch (ex){
             var  d  =  document.createElement( " div " );
            d.appendChild( this .cloneNode( true ));
             return  d.innerHTML;
        }
    });
    Element.prototype.__proto__.__defineGetter__( " xml " ,  function (){
         try {
             return   new  XMLSerializer().serializeToString( this );
        } catch (ex){
             var  d  =  document.createElement( " div " );
            d.appendChild( this .cloneNode( true ));
             return  d.innerHTML;
        }
    });
    XMLDocument.prototype.__proto__.__defineGetter__( " text " ,  function (){
         return   this .firstChild.textContent
    });
    Element.prototype.__proto__.__defineGetter__( " text " ,  function (){
         return   this .textContent
    });

    XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (xpath){
         var  x = this .selectNodes(xpath)
         if ( ! x  ||  x.length < 1 ) return   null ;
         return  x[ 0 ];
    }
    XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){
         var  xpe  =   new  XPathEvaluator();
         var  nsResolver  =  xpe.createNSResolver( this .ownerDocument  ==   null   ? 
             this .documentElement :  this .ownerDocument.documentElement);
         var  result  =  xpe.evaluate(xpath,  this , nsResolver,  0 ,  null );
         var  found  =  [];
         var  res;
         while  (res  =  result.iterateNext())
            found.push(res);
         return  found;
    }
}

var  x  =  parseXML( " <people>  <person first-name=\ " eric\ "  middle-initial=\ " H\ "  last-name=\ " jung\ " >    <address street=\ " 321  south st\ "  city=\ " denver\ "  state=\ " co\ "  country=\ " usa\ " />    <address street=\ " 123  main st\ "  city=\ " arlington\ "  state=\ " ma\ "  country=\ " usa\ " />  </person>  <person first-name=\ " jed\ "  last-name=\ " brown\ " >    <address street=\ " 321  north st\ "  city=\ " atlanta\ "  state=\ " ga\ "  country=\ " usa\ " />    <address street=\ " 123  west st\ "  city=\ " seattle\ "  state=\ " wa\ "  country=\ " usa\ " />    <address street=\ " 321  south avenue\ "  city=\ " denver\ "  state=\ " co\ "  country=\ " usa\ " />  </person></people> " );

alert( " 搜索所有人的姓氏(last-name) " )
var  results  =  x.selectNodes( " //person/@last-name " );
for  ( var  i = 0 ; i < results.length;i ++ )
  alert( " Person # "   +  i  +   "  has the last name  "   +  results[i].nodeValue);

alert( " 搜索第二个人 " );
//  IE是以0为下标基数的,而不是1 
if ( ! document.all)
    results  =  x.selectSingleNode( " /people/person[2] " );
else 
    results  =  x.selectSingleNode( " /people/person[1] " );
alert(results.xml)

alert( " 获得住址在donver街上的人 " );
results  =  x.selectNodes( " //person[address/@city='denver'] " );
for  ( var  i = 0 ; i < results.length;i ++ )alert(results[i].xml)

if ( ! document.all){
     //  获得所有街名中带south的地址 
    results  =  x.selectNodes( " //address[contains(@street, 'south')] " );
    alert(results[ 0 ].xml);
} else {
    alert( " IE不支持 //address[contains(@street, 'south')] 这种查询方式 " )
}
// --> 
</ SCRIPT > 
</ HEAD > 

< BODY > 

</ BODY > 
</ HTML > 

//demo4( cross brower)
http://kb.mozillazine.org/XPath

Javascript 相关文章推荐
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
深入分析javascript中的错误处理机制
Jul 17 Javascript
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
vue.js实现双击放大预览功能
Jun 23 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
XML+XSL 与 HTML 两种方案的结合
Apr 22 #Javascript
用javascript实现的图片马赛克后显示并切换加文字功能
Apr 21 #Javascript
JS Timing
Apr 21 #Javascript
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 #Javascript
JS 建立对象的方法
Apr 21 #Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 #Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
Apr 20 #Javascript
You might like
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python类的专用方法实例分析
2015/01/09 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
校园创业策划书
2014/01/14 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
采购员岗位职责范本
2015/04/07 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
初中语文教学研修日志
2015/11/13 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL