首页 > 其他分享 >省份城市二级联动【DOM+js+XML】

省份城市二级联动【DOM+js+XML】

时间:2022-12-28 14:04:22浏览次数:34  
标签:XML node province option DOM js xml var 节点


功能


    省份城市二级联动【js+DOM+XML】实现


效果展示




省份城市二级联动【DOM+js+XML】_ci



代码实现

显示页面


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
<html>
3
<head>
4
<title>省份城市二级联动</title>
5
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
6
</head>
7
<!-- 页面加载之后,加载省份到省份下拉框中 -->
8
<body onl oad="getProvinces();">
9
<!-- 给省份下拉框添加onchange事件,获取不同省份对应的城市 -->
10
<select id="province" name="province" onchange="getCities(this);">
11
<option value="">请选择省份</option>
12
</select>
13
<select id="city" name="city">
14
<option value="">请选择城市</option>
15
</select>
16
<script type="text/javascript">
17
/*
18
加载所有的省份
19
*/
20
function getProvinces(){
21
//获取id为province的select元素节点
22
var provinceSelectNode = document.getElementById("province");
23
//调用自定义xml解析函数,加载xml文件
24
var xmlDoc = parseXML("provinces.xml");
25
//获取xml文件中,province元素节点
26
var xmlProvince_nodes = xmlDoc.getElementsByTagName("province");
27
if(xmlProvince_nodes != null){
28
//遍历provice元素节点集合
29
for(var i=0; i<xmlProvince_nodes.length; i++){
30
//当前province元素节点下的文本节点
31
var provinceText_node = xmlProvince_nodes[i].firstChild;
32
//获取province元素节点下的文本值
33
var provinceName = provinceText_node.nodeValue;
34
//创建option,设置元素的属性和文本
35
var option_node = document.createElement("option");
36
option_node.setAttribute("value", provinceName);
37
var text_node = document.createTextNode(provinceName);
38
//把文本对象追加到新建的option节点下
39
option_node.appendChild(text_node);
40
//把新建的option追加到id为province的select元素下面
41
provinceSelectNode.appendChild(option_node);
42

43
}
44
}
45

46
}
47

48
/*
49
函数:获取省份对应的城市
50
参数:传入的下拉框select节点对象
51
*/
52
function getCities(thisNode){
53
//获取id为city的select元素节点
54
var citySelectNode = document.getElementById("city");
55
//获取下面所有的option节点(除了<option value="">请选择.....</option>这个不删除),所以下面的索引从1开始
56
var cityOptionNodes = citySelectNode.getElementsByTagName("option");
57
for(var i=1; i<cityOptionNodes.length; i++){
58
//清空下面的所有option节点
59
citySelectNode.removeChild(cityOptionNodes[i]);
60
i--;//这里写这个的原因是JavaScript中数组的长度是可变的。所以上次每次removeChild为第一个索引0
61
}
62
//调用自定义xml解析函数,加载xml文件
63
var xmlDoc = parseXML("cities.xml");
64
//获取select中被选中的option的值
65
var selectedProvince = thisNode.value;
66
//用户保存xml中对应的province元素节点
67
var xmlMachProvince_node;
68
//获取xml文件中,province元素节点
69
var xmlProvince_nodes = xmlDoc.getElementsByTagName("province");
70
//遍历xmlProvince_nodes元素节点,如果该节点name属性的值为当前select被选中的option的值
71
for(var i=0; i<xmlProvince_nodes.length; i++){
72
//获取当前xml中province元素节点
73
var xmlProvince_node = xmlProvince_nodes[i];
74
//获取其name属性值
75
var name = xmlProvince_node.getAttribute("name");
76
if(selectedProvince == name){//select中被选中的option的值和当前xml中province元素节点中name属性值一样
77
xmlMachProvince_node = xmlProvince_node;//获得了xml中name属性值对应的province元素节点
78
break;
79
}
80
}
81
if(xmlMachProvince_node != null){
82
//遍历该province节点下面的所有city元素节点
83
var city_nodes = xmlMachProvince_node.getElementsByTagName("city");
84
//遍历city元素节点集合
85
for(var i=0; i<city_nodes.length; i++){
86
//当前city元素节点下的文本节点
87
var cityText_node = city_nodes[i].firstChild;
88
//获取city元素节点下的文本值
89
var cityName = cityText_node.nodeValue;
90
//创建option,设置元素的属性和文本
91
var option_node = document.createElement("option");
92
option_node.setAttribute("value", cityName);
93
var text_node = document.createTextNode(cityName);
94
//把文本对象追加到新建的option节点下
95
option_node.appendChild(text_node);
96
//把新建的option追加到id为city的select元素下面
97
citySelectNode.appendChild(option_node);
98

99
}
100
}
101

102
}
103

104
/*
105
跨浏览器加载xml文档的函数,传入参数:xml文档名(xxxx.xml),返回xmlDoc对象
106
*/
107
function parseXML(xmlDocName)
108
{
109
var xmlDoc;
110
try{ //Internet Explorer 针对IE浏览器创建一个空的微软 XML 文档对象。
111
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
112
}catch(e){
113
try{ //Firefox, Mozilla, Opera, etc. 针对火狐已经其它浏览器创建一个空的 XML 文档对象。
114
xmlDoc=document.implementation.createDocument("","",null);
115
}catch(e){
116
alert(e.message);
117
return;
118
}
119
}
120
//关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。
121
xmlDoc.async=false;
122
xmlDoc.load(xmlDocName);//解析器加载名为 "xxx.xml" 的 XML 文档
123
return xmlDoc;
124
}
125

126
</script>
127
</body>
128
</html>



cities.xml文件

1
<?xml version="1.0" encoding="utf-8"?>
2
<china>
3
<province name="湖北省">
4
<city>武汉</city>
5
<city>黄冈</city>
6
<city>鄂州</city>
7
<city>荆州</city>
8
<city>仙桃</city>
9
<city>随州</city>
10
<city>荆门</city>
11
<city>黄石</city>
12
</province>
13
<province name="吉林省">
14
<city>长春</city>
15
<city>吉林市</city>
16
<city>四平</city>
17
<city>松原</city>
18
<city>通化</city>
19
</province>
20
<province name="辽宁省">
21
<city>沈阳</city>
22
<city>大连</city>
23
<city>鞍山</city>
24
<city>抚顺</city>
25
<city>铁岭</city>
26
</province>
27
<province name="山东省">
28
<city>济南</city>
29
<city>青岛</city>
30
<city>威海</city>
31
<city>烟台</city>
32
<city>潍坊</city>
33
</province>
34
</china>




provinces.xml文件


<?xml version="1.0" encoding="utf-8"?>
2
<china>
3
<province>湖北省</province>
4
<province>吉林省</province>
5
<province>辽宁省</province>
6
<province>山东省</province>
7
<province>贵州省</province>
8
</china>

标签:XML,node,province,option,DOM,js,xml,var,节点
From: https://blog.51cto.com/u_15769923/5974362

相关文章

  • js for循环,每次循环间隔时间执行
    根据循环的次数来设定延时时间index*1000 $.get('/zdj_stat/data/onheart',function(res){ if(res.code==0){ $(res.data).each((index,v)=>......
  • Java 中 RandomAccessFile 类读取 txt 中数字
    publicstaticvoidreadAccess()throwsException{Stringfilename="D:/file_sum/2.txt";RandomAccessFileraf=newRandomAccessFile(filename,"rw")......
  • dayjs 前几秒时间
    varsecs_befortime=dayjs().subtract(3000000000,'second').format();前言:工作中的经常对时间进行操作处理,例如倒计时,距离当前过去了多久等场景,采用原生的时......
  • json断言
    在线程组>>添加>>断言>>json断言   ......
  • jsp的9大内置对象
    1.什么是内置对象内置对象!!! 2.9大内置对象  out对象out对象类型,JspWriter类,相当于带缓存的PrintWriterPrintWriter:    wrier(内容):直接向浏览器写出内容......
  • 通讯录系统(控制台+dom4j+xPath+xml)
    设计一个通讯录程序    联系人: 编号  姓名  性别  年龄  电话  QQ 邮箱    功能要求:        添加联系人    ......
  • python——random模块
    参考:https://www.cnblogs.com/liangmingshen/p/8909376.html 1.random.random() #用于生成一个0到1的随机浮点数:0<=n<1.01importrandom2a=random.rand......
  • angularjs 嵌套循环 ng-repeat 超过30条不显示数据
    问题:ng-repeat嵌套使用的时候,内层循环的数组超过30条便不再显示数据。解决办法:加上“trackby$index”。例如:<trng-repeat="changeinInComeChange">......
  • 面试官:你说说 js 中实现继承有哪几种方法?
    前言面试官:“你说说JavaScript中实现继承有哪几种方法?”紧张的萌新:“额,class中用extends实现继承,然后...没了...”面试官:“...”······大家好,我是CoderBin,......
  • JAVA17使用JS ScriptEngine
    JAVA动态运算符判断要借用 js 当我写下下面代码ScriptEngineManagermanager=newScriptEngineManager();//创建脚本执行引擎Scrip......