以前在项目中实现二级联动是通过单纯的JS方法,在对JS的深度了解中发现通过JSDom加载写好的XML文件也可以实现二级联动,这也不失为一种好的方法,下面就跟大家分享一下。
首先,我们来看下要呈现的效果:
好,我们来看下需要的一个简单的XML文件:
我们可以看到该XML文档有三层:
根节点:cities
子节点:province
子节点:city
Province节点拥有一个Name属性
下面我们来看下JS的源码:
/*循环添加省的子城市到city选择框*/
for(var i=0;i<txt.length;i++){
//获得XML文档中省的name
var name = txt[i].getAttribute("name");
//判断选中选项的省是否与XML文档中提取到得省的name是否相同
if(sedname==name){
//在联动之前设置其中选项长度,为了使请选择选项始终显示所以长度设置为1
/*注意:这里只是设置了下拉选择框的长度,等同于把其中的固定下标的元素隐藏,并不等同于删除其中的元素*/
city.length=1;
//获得其中省的节点
var cities = txt[i];
//获得省的节点的子节点、也就是省内的城市
var cy = cities.childNodes;
/*循环添加城市节点*/
for(var j=0;j<cy.length;j++){
//创建option元素节点
var nopt = document.createElement("option");
//将获得的城市节点的文本添加到该元素节点中
nopt.appendChild(document.createTextNode(cy[j].childNodes[0].nodeValue));
//添加到下拉框节点中
city.appendChild(nopt);
}
}
}
}
}
HTML源码:
注意:这段js脚本代码仅支持IE浏览器(本人使用IE9测试),还有其中的XML加载路径,我的是默认在本站也就是同一个文件夹内;
此外,当再次点击“请选择省“这个选项时,右侧市的选择框会停留在你上一次点击的省的下属市上不会做改变,这也算一个小小的bug吧,大家见谅,有解决的请回复我。
本文版权所有,转载请注明出处。