JavaScript解析XML实现两级级联下拉列表

 1.创建测试XML文件:select.xml

  1. <?xml version="1.0" encoding="GBK"?>
  2. <select>
  3.     <province id="sx">
  4.         陕西
  5.         <city id="xa">西安</city>
  6.         <city id="bj">宝鸡</city>
  7.         <city id="ak">安康</city>
  8.     </province>
  9.     <province id="js">
  10.         江苏
  11.         <city id="nj">南京</city>
  12.         <city id="xz">徐州</city>
  13.     </province>
  14.     <province id="sh">
  15.         上海
  16.     </province>
  17. </select>


2.创建HTML页面:select.html

  1. <body>
  2. </body>
  3. <script>
  4.     /**//** 
  5.      * @description 二级级联下拉
  6.      * @author BluesLee
  7.      * @lastModif BluesLee
  8.      * @createDate 2007-10-13
  9.      * @modifDate 2007-10-15
  10.       * @version 1.0
  11.      */
  12.     SelectLevel.prototype.xml;
  13.     SelectLevel.prototype.provinces;
  14.     SelectLevel.prototype.parentName="province";//父节点名称
  15.     SelectLevel.prototype.childName="city";//子节点名称
  16.     SelectLevel.prototype.keyName="id";//属性
  17.     /**//** 
  18.      * 对象SelectLevel的构造器
  19.      * @author BluesLee
  20.      * @lastModif BluesLee
  21.      * @createDate 2007-10-13
  22.      * @modifDate 2007-10-15
  23.       * @version 1.0
  24.      */
  25.     function SelectLevel(parentName,childName,keyName){
  26.         if(parentName!=null && parentName!=""){
  27.             this.parentName=parentName;
  28.         }
  29.         if(childName!=null && childName!=""){
  30.             this.childName=childName;
  31.         }
  32.         if(keyName!=null && keyName!=""){
  33.             this.keyName=keyName;
  34.         }
  35.     }
  36.     /**//** 
  37.      * 加载xml文件
  38.      * @author BluesLee
  39.      * @lastModif BluesLee
  40.      * @createDate 2007-10-13
  41.      * @modifDate 2007-10-15
  42.       * @version 1.0
  43.      */
  44.     SelectLevel.prototype.readXML=function(url){
  45.         var selectXML;
  46.         //如果它受支持,采用标准的2级DOM技术
  47.         if(document.implementation && document.implementation.createDocument){
  48.             //创建新的Document对象
  49.             selectXML=document.implementation.createDocument("","",null);
  50.             //设置装载完毕时触发事件
  51.             selectXML.onload=function(){
  52.                 alert("加载完成");
  53.             }
  54.             selectXML.load(url);
  55.         }else{//IE浏览器创建Document对象
  56.             selectXML=new ActiveXObject("Microsoft.XMLDOM");
  57.             //设置onload
  58.             selectXML.onreadystatechange=function(){
  59.                 if(selectXML.readyState==4){
  60.                     alert("加载完成");
  61.                 }
  62.             }
  63.             selectXML.load(url);
  64.         }
  65.         this.xml=selectXML;
  66.     }
  67.     /**//** 
  68.      * 遍历xml
  69.      * @author BluesLee
  70.      * @lastModif BluesLee
  71.      * @createDate 2007-10-13
  72.      * @modifDate 2007-10-15
  73.       * @version 1.0
  74.      */
  75.     SelectLevel.prototype.iteratorXML=function(node,level){
  76.         var n=node;
  77.         if(n==null){            
  78.             n=this.xml.documentElement;
  79.         }
  80.         if(level==null){
  81.             level=0;
  82.         }
  83.         if(n.nodeType==3){
  84.             for(var i=0;i<level;i++){
  85.                 document.write("-");
  86.             }
  87.             document.write(n.data.trim()+"<br>");
  88.         }else{
  89.             for(var m=n.firstChild;m!=null;mm=m.nextSibling){
  90.                 this.iteratorXML(m,level+1);
  91.             }
  92.         }
  93.     }
  94.     /**//** 
  95.      * 下拉联动
  96.      * @author BluesLee
  97.      * @lastModif BluesLee
  98.      * @createDate 2007-10-13
  99.      * @modifDate 2007-10-15
  100.       * @version 1.0
  101.      */    
  102.     SelectLevel.prototype.changeSelect=function(){
  103.         var city=document.getElementById(this.childName);
  104.         var province=document.getElementById(this.parentName);
  105.         city.options.length=0;
  106.         if(province.value==null || province.value==""){
  107.             city.options.length=1;
  108.             city.options[0].text="请选择…";
  109.             return;
  110.         }
  111.         
  112.         var citys=this.provinces[this[province.value]].getElementsByTagName(this.childName);
  113.         if(citys.length==0){
  114.             citycity.options.length=city.options.length+1;
  115.             city.options[city.options.length-1].value=province.value;
  116.             for(var i=0;i<province.options.length;i++){
  117.                 if(province.options[i].selected){
  118.                     city.options[city.options.length-1].text=province.options[i].text;
  119.                     return;
  120.                 }
  121.             }            
  122.             return;
  123.         }
  124.         city.options.length=citys.length;
  125.         for(var i=0;i<citys.length;i++){
  126.             city.options[i].value=citys[i].getAttribute(this.keyName);
  127.             city.options[i].text=citys[i].firstChild.data.trim();
  128.         }
  129.     }
  130.     /**//** 
  131.      * 初始化下拉列表
  132.      * @author BluesLee
  133.      * @lastModif BluesLee
  134.      * @createDate 2007-10-13
  135.      * @modifDate 2007-10-15
  136.       * @version 1.0
  137.      */    
  138.     SelectLevel.prototype.init=function(parent,province,city){
  139.         thisthis.provinces=this.xml.getElementsByTagName(this.parentName);
  140.         var selectProvince=document.createElement("select");
  141.         var selectCity=document.createElement("select");
  142.         var obj=this;
  143.         selectProvince.setAttribute("name",this.parentName);
  144.         selectProvince.setAttribute("id",this.parentName);
  145.         selectProvince.attachEvent("onchange",function(){obj.changeSelect();});
  146.         selectProvince.options.length=this.provinces.length+1;
  147.         selectProvince.options[0].text="请选择…";
  148.         selectCity.setAttribute("name",this.childName);
  149.         selectCity.setAttribute("id",this.childName);
  150.         selectCity.options.length=1;
  151.         selectCity.options[0].text="请选择…";
  152.         for(var i=0;i<this.provinces.length;i++){
  153.             SelectLevel.prototype[this.provinces[i].getAttribute(this.keyName)]=i;
  154.             selectProvince.options[i+1].value=this.provinces[i].getAttribute(this.keyName);
  155.             selectProvince.options[i+1].text=this.provinces[i].firstChild.data.trim();
  156.             if(this.provinces[i].getAttribute(this.keyName)==province){
  157.                 selectProvince.options[i+1].selected=true;
  158.                 var citys=this.provinces[i].getElementsByTagName(this.childName);                
  159.                 selectCity.options.length=citys.length+1;
  160.                 for(var j=0;j<citys.length;j++){
  161.                     selectCity.options[j+1].value=citys[j].getAttribute(this.keyName);
  162.                     selectCity.options[j+1].text=citys[j].firstChild.data.trim();
  163.                     if(citys[j].getAttribute(this.keyName)==city){
  164.                         selectCity.options[j+1].selected=true;
  165.                     }
  166.                 }
  167.             }
  168.         }
  169.         parent.appendChild(selectProvince);
  170.         parent.appendChild(selectCity);
  171.     }
  172.     String.prototype.trim=function(){        
  173.         return this.replace(/^s*/g,"").replace(/s*$/g,"");
  174.     }
  175.     //测试
  176.     var newnewXML=new SelectLevel();
  177.     newXML.readXML("select.xml");
  178.     newXML.iteratorXML(null,-2);
  179.     newXML.init(document.body,"sx","bj");
  180. </script>


http://blog.csdn.net/lip009/archive/2007/10/15/1825960.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值