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 基础学习笔记之文档处理
May 29 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
原生js实现图片轮播特效
Dec 18 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
在vue中使用v-bind:class的选项卡方法
Sep 27 Javascript
微信小程序生成二维码的示例代码
Mar 29 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
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下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python 安装impala包步骤
2020/03/28 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
会计专业自我鉴定范文
2013/12/29 职场文书
卖车协议书
2014/04/21 职场文书
竞选部长演讲稿
2014/04/26 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Linux中各个目录的作用与内容
2022/06/28 Servers