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 遮罩层实现(mask)实现代码
Jan 09 Javascript
关于jQuery UI 使用心得及技巧
Oct 10 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
Oct 11 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
JavaScript中String对象的方法介绍
Jan 04 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
VueCli4项目配置反向代理proxy的方法步骤
May 17 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程序员基本要求和必备技能
2014/05/09 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
深入了解js原型模式
2019/05/30 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
python获取指定网页上所有超链接的方法
2015/04/04 Python
初学Python函数的笔记整理
2015/04/07 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
Python编程求质数实例代码
2018/01/31 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python: 传递列表副本方式
2019/12/19 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
高一家长会邀请函
2014/01/12 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
物流专员岗位职责
2014/02/17 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
导游词之安徽九华山
2019/09/18 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers