JavaScript从XML中解析数据达到省市区下拉列表级联

没事写着玩玩,

JavaScript从XML中解析数据达到省市区下拉列表级联

HTMl代码如下:

 1 <html>
2
3 <head>
4
5 <title></title>
6 <script>
7 function $(obj){
8 return document.getElementById(obj);
9 }
10 //返回xmldoc,处理了浏览器差异不同的影响
11 function getXmlDoc(){
12 var xmldoc=null;
13 try{
14 xmldoc=new ActiveXObject('Microsoft.XMLDOM');//微软的 XML 解析器内建于IE5以及更高的版本中
15
16 }catch(e){
17 xmldoc = document.implementation.createDocument("","",null);//其它浏览器 Firefox, Mozilla, Opera, etc.
18 }
19 return xmldoc;
20 }
21
22 //定义变量
23 var xmldoc;
24 var province = null;
25 var city = null;
26 var country =null;
27 var list=null; //数组,用来保存从XML中得出的所有省市区数据
28 //定义一个方法,用于初始化数据,从 2.xml加载数据
29 function init(){
30 xmldoc=getXmlDoc();
31 xmldoc.async=false;
32 xmldoc.load('2.xml');
33 province =$('province');
34 city = $('city');
35 country = $('country');
36 list=new Array();
37 }
38
39 window.onload=function(){
40 init();
41 province.options.length=0;
42 var provinces = xmldoc.getElementsByTagName("province"); //得到根节点
43
44
45 //从XML中得出省市区存至list中如:list['湖南省']=new Array('长沙市,衡阳市') list['长沙市']=new Array('长沙县,渡河区');
46
47 for(var i=0;i<provinces.length;i++){
48 if(provinces[i].nodeType==1){
49 //往省份下拉列表中加数据
50 province.options.add(new Option(provinces[i].getAttribute("pname"),provinces[i].getAttribute("pname")));
51 list[provinces[i].getAttribute("pname")]=new Array(); //将list[省份名]定义为数组
52 for(var j=0;j<provinces[i].childNodes.length;j++){
53 if(provinces[i].childNodes[j].nodeType==1){
54 list[provinces[i].getAttribute("pname")].push(provinces[i].childNodes[j].getAttribute("cname"));
55 list[provinces[i].childNodes[j].getAttribute("cname")] = new Array(); //将list[城市名]定义为数组
56 for(var a=0;a<provinces[i].childNodes[j].childNodes.length;a++){
57 list[provinces[i].childNodes[j].getAttribute("cname")].push(provinces[i].childNodes[j].childNodes[a].getAttribute("cname"));
58 }
59 }
60 }
61 }
62 }
63
64 showcity();
65
66 //为省,城市,两个下拉列表onchang事件分别绑定函数。
67 city.onchange=showcountry;
68 province.onchange=showcity;
69 }
70
71 function showcity(){
72
73 city.options.length=0;
74 for(var i in list[province.value]){
75 city.options.add(new Option(list[province.value][i],list[province.value][i]));
76 }
77 }
78
79
80 function showcountry(){
81 country.options.length=0;
82 for(var i in list[city.value]){
83 country.options.add(new Option(list[city.value][i],list[city.value][i]));
84 }
85 }
86
87 </script>
88 </head>
89 <body>
90 省:<select id="province" name="province"></select>
91 市:<select id="city" name="city"></select>
92 区:<select id="country" name="country"></select>
93 </body>
94 </html>

2.xml随便写了些内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <test>
3
4 <province pname="湖南省">
5 <city cname="长沙市">
6 <country cname="长沙县"></country>
7 <country cname="渡河区"></country>
8 </city>
9 <city cname="衡阳市">
10 <country cname="珠晖区"></country>
11 <country cname="石鼓区"></country>
12 </city>
13 </province>
14
15
16 <province pname="湖北省">
17 <city cname="武汉市">
18 <country cname="不知道"></country>
19 </city>
20 </province>
21
22 </test>

转载于:https://www.cnblogs.com/bianguai/archive/2011/08/16/2141402.html

版本:v1.2 ----------------------------------------------- (C) Oran Day(likecode#gmail.com) ----------------------------------------------- ----------------------------------------------- 文件夹说明: - ChinaRegions_Complained 已编译后的dll - ChinaRegions_Source - 服务器控件源码项目 - html - 演示代码级源测试代码 ----------------------------------------------- ----------------------------------------------- ChinaRegion 文件名:OranChinaRegion.dll 自我说明XML:OranChinaRegion.XML 描述: 国行政区域二级联系菜单,根据上级行政区加载下级行政区列表 XML数据驱动,可自定义添加、删除,简易更新 支持回发恢复状态,已正确设定行政区可自动选定和加载各级行政区数据 其它说明: 应用网站必须存在行政区域的数据XML文件,默认放于应用页面同级目录的oran/regions下,其regions.xml为一级行政区数据,其它均为二级行政区数据 可自定义修改XML目录,在web.config/appSettings/ChinaRegionXmlFolderPath 配置,e.g.:/oran/regions 创建实例至少指定 runat 和 ID 属性。 应用: 1.为网站添加DLL引用 引用OranChinaRegion.dll 2.复制XML文件至网站 3.注册控件 e.g.: 4.在您期望的位置插入该控件, e.g.: 5.获取值 ParentRegion 获取或设置一级行政区 ChildRegion 获取或设置二级行政区 e.g: string parRgn = region1.ParentRegion; if (parRgn.Length > 0) Response.Write("您选择的是:" + parRgn); string chdRgn = region1.ChildRegion; if (chdRgn.Length > 0) Response.Write(" - " + chdRgn); 6.减少网络传输量,提高网络传输效率,您可以将XML压缩再应用于实际网站。 7.更多参数请参考自我说明XML。 8.期待您报告BUG:)。 -----------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值