本文实例讲述了javascript解析xml实现省市县三级联动的方法。分享给大家供大家参考。具体实现方法如下:
(该方法适用于任何常用浏览器)
<body> <div> <span> <select id=\"sheng\" style=\"width: 100px\"></select> </span> <span> <select id=\"shi\" style=\"width: 100px\"></select> </span> <span> <select id=\"xian\" style=\"width: 100px\"></select> </span> </div> </body> </html> <script type=\"text/javascript\"> <!-- function getXmlDoc(){ var xmlDoc; try{ //给IE浏览器 创建一个空的微软 XML文档对象 xmlDoc=new ActiveXObject(\"Microsoft.XMLDOM\"); }catch(err){ try{ //在 Firefox及其他浏览器(opera)中的 XML解析器创建一个空的 XML文档对象。 xmlDoc=document.implementation.createDocument(\"\",\"\",null); }catch(er){ alert(\"所使用的浏览器版本太低了,该换更新了\"); } } //关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行 xmlDoc.async=false; //解析器加载名为 \"xxx.xml\" 的 XML 文档 xmlDoc.load(\"city.xml\"); return xmlDoc; } window.onload=function(){ var xmlDoc=getXmlDoc(); //获取xml文件的根节点 var root=xmlDoc.documentElement; //获取xml文件的根节点下面的省节点 var provinces=root.childNodes; //获取页面中要显示的省、市和县的控件dom对象 var sheng=document.getElementById(\"sheng\"); var shi=document.getElementById(\"shi\"); var xian=document.getElementById(\"xian\"); //遍历所有的省 for(var i=0;i<provinces.length;i++){ //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼容性 问 题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) if(provinces[i].nodeType==1){ //创建一个option节点对象 var shengopt=document.createElement(\"option\"); //为option省节点添加文本 shengopt.appendChild(document.createTextNode(provinces[i].getAttr ibute(\"name\"))); //为option省节点设置属性 shengopt.setAttribute(\"value\",provinces[i].getAttribute(\"postcode \")); //添加省到页面dom对象中 sheng.appendChild(shengopt); } } //当省节点发生改变时 触发事件 sheng.onchange=function(){ //获取省节点所有的option对象的集合 var shengs=sheng.options; //获取选中option对象的selectedIndex(下标值) var num=shengs.selectedIndex; //清空市 区 shi.length=0; xian.length=0; //根据选中的省获取其value值的内容 即xml文件中的postcode对应的 值 var ppostcode=shengs[num].getAttribute(\"value\"); //遍历所有的省 for(var i=0;i<provinces.length;i++){ //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼 容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素 节点) if(provinces[i].nodeType==1){ //根据省获取其postcode值的内容 即html文件中的value对应 的值 var postcode=provinces[i].getAttribute(\"postcode\"); if(postcode==ppostcode){ //获取省节点的子节点 var cities=provinces[i].childNodes; //清空 shi.length=0; //遍历所有的市 for(var i=0;i<cities.length;i++){ //查看该节点是否是元素节点 也是为了实现不同浏览 器之间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) if(cities[i].nodeType==1){ //创建一个option节点对象 var shiopt=document.createElement(\"option\"); //为option市节点添加文本 shiopt.appendChild(document.createTextNode(cities[i].getAttribute (\"name\"))); //为option市节点设置属性 shiopt.setAttribute(\"value\", cities[i].getAttribute(\"postcode\")); //添加市到页面dom对象中 shi.appendChild(shiopt); } } break; } } } } //当市节点发生改变时 触发事件 shi.onchange=function(){ //获取市节点所有的option对象的集合 var shis=shi.options; //获取选中option对象的selectedIndex(下标值) var num=shis.selectedIndex; //根据选中的市获取其value值的内容 即xml文件中的postcode对应的 值 var spostcode=shis[num].getAttribute(\"value\"); //遍历所有的省 for(var i=0;i<provinces.length;i++){ //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼 容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素 节点) if(provinces[i].nodeType==1){ //获取省节点的子节点 var cities=provinces[i].childNodes; //遍历所有的市 for(var j=0;j<cities.length;j++){ //查看该节点是否是元素节点 也是为了实现不同浏览器之 间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) if(cities[j].nodeType==1){ //根据市获取其postcode值的内容 即html文件中的 value对应的值 var postcode=cities[j].getAttribute(\"postcode\"); if(postcode==spostcode){ //清空 xian.length=0; //获取市节点的子节点 var areas=cities[j].childNodes; //遍历所有的区(县) for(var k=0;k<areas.length;k++){ //查看该节点是否是元素节点 也是为了实现不 同浏览器之间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) if(areas[k].nodeType==1){ //创建一个option节点对象 var xianopt=document.createElement(\"option\"); //为option区节点添加文本 xianopt.appendChild(document.createTextNode(areas[k].getAttribute (\"name\"))); //为option区节点设置属性 xianopt.setAttribute(\"value\", areas[k].getAttribute(\"postcode\")); //添加区到页面dom对象中 xian.appendChild(xianopt); } } break; } } } } } } } //--> </script>
Xml文件(简写版)
<root name=\"中国\"> <province name=\"请选择省\" postcode=\"100000\" > <city name=\"请选择市\" postcode=\"100100\" > <area name=\"请选择区\" postcode=\"100101\" /> </city> </province> <province name=\"北京市\" postcode=\"110000\" > <city name=\"市辖区\" postcode=\"110100\" > <area name=\"东城区\" postcode=\"110101\" /> <area name=\"西城区\" postcode=\"110102\" /> <area name=\"崇文区\" postcode=\"110103\" /> <area name=\"宣武区\" postcode=\"110104\" /> <area name=\"朝阳区\" postcode=\"110105\" /> <area name=\"丰台区\" postcode=\"110106\" /> <area name=\"石景山区\" postcode=\"110107\" /> <area name=\"海淀区\" postcode=\"110108\" /> <area name=\"门头沟区\" postcode=\"110109\" /> <area name=\"房山区\" postcode=\"110111\" /> <area name=\"通州区\" postcode=\"110112\" /> <area name=\"顺义区\" postcode=\"110113\" /> <area name=\"昌平区\" postcode=\"110114\" /> <area name=\"大兴区\" postcode=\"110115\" /> <area name=\"怀柔区\" postcode=\"110116\" /> <area name=\"平谷区\" postcode=\"110117\" /> </city> <city name=\"县\" postcode=\"110200\" > <area name=\"密云县\" postcode=\"110228\" /> <area name=\"延庆县\" postcode=\"110229\" /> </city> </province> </root>
希望本文所述对大家的javascript程序设计有所帮助。
本文地址:https://www.stayed.cn/item/3920
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我