指引网

当前位置: 主页 > 网页制作 > JavaScript >

JavaScript XML省市县三级联动下拉菜单

来源:网络 作者:佚名 点击: 时间:2017-08-07 22:20
[摘要] 我介绍一个xml+js实现的省市县三级联动下拉菜单效果,大家可参考。js代码复制代码代码如下:<html><headrunat="server"><title>省市县三级...
我介绍一个xml+js实现的省市县三级联动下拉菜单效果,大家可参考。
 
 

js代码
 

 
复制代码代码如下:
  1. <html>
  2. <head runat="server">
  3.     <title>省市县三级联动菜单</title>
  4.             <script   language="javascript"   type="text/javascript">
  5.   //首先需要初始化
  6.   var   xmlDoc;  
  7.   var   nodeIndex;
  8.   function   getxmlDoc()  
  9.   {  
  10.       xmlDoc=new   ActiveXObject("Microsoft.XMLDOM");  
  11.           var   currNode;  
  12.           xmlDoc.async=false;  
  13.           xmlDoc.load("Area.xml");  
  14.           if(xmlDoc.parseError.errorCode!=0)  
  15.           {  
  16.                   var   myErr=xmlDoc.parseError;  
  17.                   alert("出错!"+myErr.reason);  
  18.           }          
  19.   }
  20.   function Init()
  21.   {
  22.     //打开xlmdocm文档
  23.     getxmlDoc();
  24.     var   dropElement1=document.getElementById("Select1");
  25.     var   dropElement2=document.getElementById("Select2");
  26.     var   dropElement3=document.getElementById("Select3");  
  27.     RemoveDropDownList(dropElement1);
  28.     RemoveDropDownList(dropElement2);
  29.     RemoveDropDownList(dropElement3);
  30.     var  TopnodeList=xmlDoc.selectSingleNode("address").childNodes;
  31.     if(TopnodeList.length>0)
  32.     {
  33.         //省份列表
  34.         var country;
  35.         var province;
  36.         var city;
  37.         for(var   i=0; i<TopnodeList.length;   i++)
  38.         {
  39.               //添加列表项目
  40.               country=TopnodeList[i];      
  41.               var   eOption=document.createElement("option");  
  42.               eOption.value=country.getAttribute("name");
  43.               eOption.text=country.getAttribute("name");
  44.               dropElement1.add(eOption);
  45.         }
  46.         if(TopnodeList[0].childNodes.length>0)
  47.         {
  48.             //城市列表
  49.             for(var i=0;i<TopnodeList[0].childNodes.length;i++)
  50.             {
  51.                var   id=dropElement1.options[0].value;
  52.                //默认为第一个省份的城市
  53.                province=TopnodeList[0];
  54.                var   eOption=document.createElement("option");
  55.                eOption.value=province.childNodes[i].getAttribute("name");  
  56.                eOption.text=province.childNodes[i].getAttribute("name");  
  57.                dropElement2.add(eOption);
  58.             }
  59.             if(TopnodeList[0].childNodes[0].childNodes.length>0)
  60.             {
  61.                //县列表
  62.                for(var i=0;i<TopnodeList[0].childNodes[0].childNodes.length;i++)
  63.                {
  64.                   var   id=dropElement2.options[0].value;
  65.                   //默认为第一个城市的第一个县列表
  66.                   city=TopnodeList[0].childNodes[0];
  67.                   var   eOption=document.createElement("option");
  68.                   eOption.value=city.childNodes[i].getAttribute("name");  
  69.                   eOption.text=city.childNodes[i].getAttribute("name");  
  70.                   this.document.getElementById("Select3").add(eOption);
  71.                }
  72.             }
  73.         }
  74.     }
  75.   }  
  76.   function   selectCity()  
  77.   {       var   dropElement1=document.getElementById("Select1");
  78.           var   name=dropElement1.options[dropElement1.selectedIndex].value;
  79.           //alert(id);
  80.           var   countryNodes=xmlDoc.selectSingleNode('//address/province [@name="'+name+'"]');  
  81.           //alert(countryNodes.childNodes.length);
  82.           var   province=document.getElementById("Select2");      
  83.           var   city=document.getElementById("Select3");      
  84.           RemoveDropDownList(province);  
  85.           RemoveDropDownList(city);
  86.           if(countryNodes.childNodes.length>0)
  87.           {
  88.                //填充城市
  89.                for(var   i=0;   i<countryNodes.childNodes.length;   i++)  
  90.                {  
  91.                   var   provinceNode=countryNodes.childNodes[i];    
  92.                   var   eOption=document.createElement("option");  
  93.                   eOption.value=provinceNode.getAttribute("name");  
  94.                   eOption.text=provinceNode.getAttribute("name");  
  95.                   province.add(eOption);  
  96.                }
  97.                if(countryNodes.childNodes[0].childNodes.length>0)
  98.                {
  99.                   //填充选择省份的第一个城市的县列表
  100.                   for(var i=0;i<countryNodes.childNodes[0].childNodes.length;i++)
  101.                   {
  102.                       //alert("i="+i+"rn"+"length="+countryNodes.childNodes[0].childNodes.length+"rn");
  103.                       var   dropElement2=document.getElementById("Select2");
  104.                       var   dropElement3=document.getElementById("Select3");
  105.                       //取当天省份下第一个城市列表
  106.                       var cityNode=countryNodes.childNodes[0];
  107.                       //alert(cityNode.childNodes.length);
  108.                       var   eOption=document.createElement("option");
  109.                       eOption.value=cityNode.childNodes[i].getAttribute("name");  
  110.                       eOption.text=cityNode.childNodes[i].getAttribute("name");  
  111.                       dropElement3.add(eOption);
  112.                   }
  113.                }
  114.           }
  115.   }  
  116.   function   selectCountry()  
  117.   {  
  118.           var   dropElement2=document.getElementById("Select2");  
  119.           var   name=dropElement2.options[dropElement2.selectedIndex].value;  
  120.           var   provinceNode=xmlDoc.selectSingleNode('//address/province/city[@name="'+name+'"]');
  121.           var   city=document.getElementById("Select3");      
  122.           RemoveDropDownList(city);  
  123.           for(var   i=0;   i<provinceNode.childNodes.length;   i++)  
  124.           {  
  125.                   var   cityNode=provinceNode.childNodes[i];    
  126.                   var   eOption=document.createElement("option");  
  127.                   eOption.value=cityNode.getAttribute("name");  
  128.                   eOption.text=cityNode.getAttribute("name");  
  129.                   city.add(eOption);  
  130.           }  
  131.   }  
  132.   function   RemoveDropDownList(obj)  
  133.   {  
  134.       if(obj)
  135.       {
  136.           var   len=obj.options.length;  
  137.           if(len>0)
  138.           {
  139.             //alert(len);
  140.             for(var   i=len;i>=0;i--)  
  141.             {  
  142.                   obj.remove(i);  
  143.             }
  144.           }
  145.        }
  146.            
  147.   }  
  148.   </script>
  149. </head>
  150. <body onload="Init();">
  151.     <form id="form1" runat="server">
  152.     <div>
  153.     <select id="Select1" name="Select1" runat="server" onchange="selectCity();">
  154.    <option value="" selected="true">/直辖市</option>
  155.  </select>
  156.     <select id="Select2" name="Select2" runat="server" onchange="selectCountry()">
  157.   <option value="" selected="true">请选择</option>
  158.  </select>
  159.     <select id="Select3" name="Select3" runat="server" >
  160.   <option value="" selected="true">请选择</option>
  161.  </select>
  162.     </div>
  163.     </form>
  164. </body>
  165. </html>
 
xml文件

 
复制代码代码如下:
  1. <?xml version="1.0" encoding="gb2312" ?>
  2.  <address>
  3.  <province name="北京市">
  4.  <city name="北京辖区">
  5.   <country name="东城区" />
  6.   <country name="西城区" />
  7.   <country name="崇文区" />
  8.   <country name="宣武区" />
  9.   <country name="朝阳区" />
  10.   <country name="丰台区" />
  11.   <country name="石景山区" />
  12.   <country name="海淀区" />
  13.   <country name="门头沟区" />
  14.   <country name="房山区" />
  15.   <country name="通州区" />
  16.   <country name="顺义区" />
  17.   <country name="昌平区" />
  18.   <country name="大兴区" />
  19.   <country name="怀柔区" />
  20.   <country name="平谷区" />
  21.   </city>
  22.  <city name="北京辖县">
  23.   <country name="密云县" />
  24.   <country name="延庆县" />
  25.   </city>
  26.   </province>
  27.  <province name="天津市">
  28.  <city name="天津辖区">
  29.   <country name="和平区" />
  30.   <country name="河东区" />
  31.   <country name="河西区" />
  32.   <country name="南开区" />
  33.   <country name="河北区" />
  34.   <country name="红桥区" />
  35.   <country name="塘沽区" />
  36.   <country name="汉沽区" />
  37.   <country name="大港区" />
  38.   <country name="东丽区" />
  39.   <country name="西青区" />
  40.   <country name="津南区" />
  41.   <country name="北辰区" />
  42.   <country name="武清区" />
  43.   <country name="宝坻区" />
  44.   </city>
  45.    <province name="台湾省" />
  46.   <province name="香港特区" />
  47.   <province name="澳门特区" />
  48.  </address>

------分隔线----------------------------