首页 > 语言 > JavaScript > 正文

javascript解析xml实现省市县三级联动的方法

2024-05-06 16:23:42
字体:
来源:转载
供稿:网友

这篇文章主要介绍了javascript解析xml实现省市县三级联动的方法,涉及javascript针对节点的操作与XML文件解析的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了javascript解析xml实现省市县三级联动的方法。分享给大家供大家参考。具体实现方法如下:

(该方法适用于任何常用浏览器)

 

 
  1. <body> 
  2. <div> 
  3. <span> 
  4. <select id="sheng" style="width: 100px"></select> 
  5. </span> 
  6. <span> 
  7. <select id="shi" style="width: 100px"></select> 
  8. </span> 
  9. <span> 
  10. <select id="xian" style="width: 100px"></select> 
  11. </span> 
  12. </div> 
  13. </body> 
  14. </html> 
  15. <script type="text/javascript"
  16. <!-- 
  17. function getXmlDoc(){ 
  18. var xmlDoc; 
  19. try
  20. //给IE浏览器 创建一个空的微软 XML文档对象 
  21. xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
  22. }catch(err){ 
  23. try
  24. //在 Firefox及其他浏览器(opera)中的 XML解析器创建一个空的 XML文档对象。  
  25. xmlDoc=document.implementation.createDocument("","",null); 
  26. }catch(er){ 
  27. alert("所使用的浏览器版本太低了,该换更新了"); 
  28. //关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行 
  29. xmlDoc.async=false
  30. //解析器加载名为 "xxx.xml" 的 XML 文档 
  31. xmlDoc.load("city.xml"); 
  32. return xmlDoc; 
  33. window.onload=function(){ 
  34. var xmlDoc=getXmlDoc(); 
  35. //获取xml文件的根节点 
  36. var root=xmlDoc.documentElement; 
  37. //获取xml文件的根节点下面的省节点 
  38. var provinces=root.childNodes; 
  39. //获取页面中要显示的省、市和县的控件dom对象 
  40. var sheng=document.getElementById("sheng"); 
  41. var shi=document.getElementById("shi"); 
  42. var xian=document.getElementById("xian"); 
  43. //遍历所有的省  
  44. for(var i=0;i<provinces.length;i++){ 
  45. //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼容性 问 题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) 
  46. if(provinces[i].nodeType==1){ 
  47. //创建一个option节点对象 
  48. var shengopt=document.createElement("option"); 
  49. //为option省节点添加文本 shengopt.appendChild(document.createTextNode(provinces[i].getAttr ibute("name"))); 
  50. //为option省节点设置属性 shengopt.setAttribute("value",provinces[i].getAttribute("postcode ")); 
  51. //添加省到页面dom对象中 
  52. sheng.appendChild(shengopt); 
  53. //当省节点发生改变时 触发事件 
  54. sheng.onchange=function(){ 
  55. //获取省节点所有的option对象的集合 
  56. var shengs=sheng.options; 
  57. //获取选中option对象的selectedIndex(下标值) 
  58. var num=shengs.selectedIndex; 
  59. //清空市 区  
  60. shi.length=0; 
  61. xian.length=0; 
  62. //根据选中的省获取其value值的内容 即xml文件中的postcode对应的 值 
  63. var ppostcode=shengs[num].getAttribute("value"); 
  64. //遍历所有的省 
  65. for(var i=0;i<provinces.length;i++){ 
  66. //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼 容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素 节点) 
  67. if(provinces[i].nodeType==1){ 
  68. //根据省获取其postcode值的内容 即html文件中的value对应 的值 
  69. var postcode=provinces[i].getAttribute("postcode"); 
  70. if(postcode==ppostcode){ 
  71. //获取省节点的子节点 
  72. var cities=provinces[i].childNodes; 
  73. //清空 
  74. shi.length=0; 
  75. //遍历所有的市 
  76. for(var i=0;i<cities.length;i++){ 
  77. //查看该节点是否是元素节点 也是为了实现不同浏览 器之间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) 
  78. if(cities[i].nodeType==1){ 
  79. //创建一个option节点对象 
  80. var shiopt=document.createElement("option"); 
  81. //为option市节点添加文本 shiopt.appendChild(document.createTextNode(cities[i].getAttribute ("name"))); 
  82. //为option市节点设置属性 
  83. shiopt.setAttribute("value", cities[i].getAttribute("postcode")); 
  84. //添加市到页面dom对象中 
  85. shi.appendChild(shiopt); 
  86. break
  87. //当市节点发生改变时 触发事件 
  88. shi.onchange=function(){ 
  89. //获取市节点所有的option对象的集合 
  90. var shis=shi.options; 
  91. //获取选中option对象的selectedIndex(下标值) 
  92. var num=shis.selectedIndex; 
  93. //根据选中的市获取其value值的内容 即xml文件中的postcode对应的 值 
  94. var spostcode=shis[num].getAttribute("value"); 
  95. //遍历所有的省 
  96. for(var i=0;i<provinces.length;i++){ 
  97. //查看该节点是否是元素节点 也是为了实现不同浏览器之间的兼 容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素 节点) 
  98. if(provinces[i].nodeType==1){ 
  99. //获取省节点的子节点 
  100. var cities=provinces[i].childNodes; 
  101. //遍历所有的市 
  102. for(var j=0;j<cities.length;j++){ 
  103. //查看该节点是否是元素节点 也是为了实现不同浏览器之 间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) 
  104. if(cities[j].nodeType==1){ 
  105. //根据市获取其postcode值的内容 即html文件中的 value对应的值 
  106. var postcode=cities[j].getAttribute("postcode"); 
  107. if(postcode==spostcode){ 
  108. //清空 
  109. xian.length=0; 
  110. //获取市节点的子节点 
  111. var areas=cities[j].childNodes; 
  112. //遍历所有的区(县) 
  113. for(var k=0;k<areas.length;k++){ 
  114. //查看该节点是否是元素节点 也是为了实现不 同浏览器之间的兼容性问题(1是元素节点 Node.ELEMENT_NODE ---1 -- 元素节点) 
  115. if(areas[k].nodeType==1){ 
  116. //创建一个option节点对象 
  117. var xianopt=document.createElement("option"); 
  118. //为option区节点添加文本 
  119. xianopt.appendChild(document.createTextNode(areas[k].getAttribute ("name"))); 
  120. //为option区节点设置属性 
  121. xianopt.setAttribute("value", areas[k].getAttribute("postcode")); 
  122. //添加区到页面dom对象中 
  123. xian.appendChild(xianopt); 
  124. break
  125. //--> 
  126. </script> 

Xml文件(简写版)

 

 
  1. <root name="中国"
  2. <province name="请选择省" postcode="100000" > 
  3. <city name="请选择市" postcode="100100" > 
  4. <area name="请选择区" postcode="100101" /> 
  5. </city> 
  6. </province> 
  7. <province name="北京市" postcode="110000" > 
  8. <city name="市辖区" postcode="110100" > 
  9. <area name="东城区" postcode="110101" /> 
  10. <area name="西城区" postcode="110102" /> 
  11. <area name="崇文区" postcode="110103" /> 
  12. <area name="宣武区" postcode="110104" /> 
  13. <area name="朝阳区" postcode="110105" /> 
  14. <area name="丰台区" postcode="110106" /> 
  15. <area name="石景山区" postcode="110107" /> 
  16. <area name="海淀区" postcode="110108" /> 
  17. <area name="门头沟区" postcode="110109" /> 
  18. <area name="房山区" postcode="110111" /> 
  19. <area name="通州区" postcode="110112" /> 
  20. <area name="顺义区" postcode="110113" /> 
  21. <area name="昌平区" postcode="110114" /> 
  22. <area name="大兴区" postcode="110115" /> 
  23. <area name="怀柔区" postcode="110116" /> 
  24. <area name="平谷区" postcode="110117" /> 
  25. </city> 
  26. <city name="县" postcode="110200" > 
  27. <area name="密云县" postcode="110228" /> 
  28. <area name="延庆县" postcode="110229" /> 
  29. </city> 
  30. </province> 
  31. </root> 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选