当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript XML实现两级级联下拉列表

Javascript
javascript options属性集合操作代码
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
javascript 显示当前系统时间代码
firefox和IE系列的相关区别整理 以备后用
extJs 常用到的增,删,改,查操作代码
Javascript 面向对象特性
JavaScript的public、private和privileged模式
通过javascript设置css属性的代码
javascript iframe编程相关代码
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
js DOM模型操作
js 学习笔记(三)
用js做一个小游戏平台 (一)
jquery UI 1.72 之datepicker
jQuery的三种$()
JavaScript 常用函数
用javascript实现源代码的隐藏与解密的方法
javascript Onunload与Onbeforeunload使用小结
Javascript的闭包
JavaScript 对Cookie 操作的封装小结

Javascript 中的 JavaScript XML实现两级级联下拉列表


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 92 ::
收藏到网摘: n/a

用xml作为存储容器,不用数据库,速度和效率高些。 1.创建测试XML文件:select.xml
复制代码 代码如下:

<?xml version="1.0" encoding="GBK"?>
<select>
<province id="sx">
陕西
<city id="xa">西安</city>
<city id="bj">宝鸡</city>
<city id="ak">安康</city>
</province>
<province id="js">
江苏
<city id="nj">南京</city>
<city id="xz">徐州</city>
</province>
<province id="sh">
上海
</province>
</select>

2.创建HTML页面:select.html
复制代码 代码如下:

<body>
</body>
<script>...
/**//**
* @description 二级级联下拉
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
SelectLevel.prototype.xml;
SelectLevel.prototype.provinces;
SelectLevel.prototype.parentName="province";//父节点名称
SelectLevel.prototype.childName="city";//子节点名称
SelectLevel.prototype.keyName="id";//属性
/**//**
* 对象SelectLevel的构造器
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
function SelectLevel(parentName,childName,keyName)...{
if(parentName!=null && parentName!="")...{
this.parentName=parentName;
}
if(childName!=null && childName!="")...{
this.childName=childName;
}
if(keyName!=null && keyName!="")...{
this.keyName=keyName;
}
}
/**//**
* 加载xml文件
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
SelectLevel.prototype.readXML=function(url)...{
var selectXML;
//如果它受支持,采用标准的2级DOM技术
if(document.implementation && document.implementation.createDocument)...{
//创建新的Document对象
selectXML=document.implementation.createDocument("","",null);
//设置装载完毕时触发事件
selectXML.onload=function()...{
alert("加载完成");
}
selectXML.load(url);
}else...{//IE浏览器创建Document对象
selectXML=new ActiveXObject("Microsoft.XMLDOM");
//设置onload
selectXML.onreadystatechange=function()...{
if(selectXML.readyState==4)...{
alert("加载完成");
}
}
selectXML.load(url);
}
this.xml=selectXML;
}
/**//**
* 遍历xml
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
SelectLevel.prototype.iteratorXML=function(node,level)...{
var n=node;
if(n==null)...{
n=this.xml.documentElement;
}
if(level==null)...{
level=0;
}
if(n.nodeType==3)...{
for(var i=0;i<level;i++)...{
document.write("-");
}
document.write(n.data.trim()+"<br>");
}else...{
for(var m=n.firstChild;m!=null;m=m.nextSibling)...{
this.iteratorXML(m,level+1);
}
}
}
/**//**
* 下拉联动
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
SelectLevel.prototype.changeSelect=function()...{
var city=document.getElementById(this.childName);
var province=document.getElementById(this.parentName);
city.options.length=0;
if(province.value==null || province.value=="")...{
city.options.length=1;
city.options[0].text="请选择…";
return;
}
var citys=this.provinces[this[province.value]].getElementsByTagName(this.childName);
if(citys.length==0)...{
city.options.length=city.options.length+1;
city.options[city.options.length-1].value=province.value;
for(var i=0;i<province.options.length;i++)...{
if(province.options[i].selected)...{
city.options[city.options.length-1].text=province.options[i].text;
return;
}
}
return;
}
city.options.length=citys.length;
for(var i=0;i<citys.length;i++)...{
city.options[i].value=citys[i].getAttribute(this.keyName);
city.options[i].text=citys[i].firstChild.data.trim();
}
}
/**//**
* 初始化下拉列表
* @author BluesLee
* @lastModif BluesLee
* @createDate 2007-10-13
* @modifDate 2007-10-15
* @version 1.0
*/
SelectLevel.prototype.init=function(parent,province,city)...{
this.provinces=this.xml.getElementsByTagName(this.parentName);
var selectProvince=document.createElement("select");
var selectCity=document.createElement("select");
var obj=this;
selectProvince.setAttribute("name",this.parentName);
selectProvince.setAttribute("id",this.parentName);
selectProvince.attachEvent("onchange",function()...{obj.changeSelect();});
selectProvince.options.length=this.provinces.length+1;
selectProvince.options[0].text="请选择…";
selectCity.setAttribute("name",this.childName);
selectCity.setAttribute("id",this.childName);
selectCity.options.length=1;
selectCity.options[0].text="请选择…";
for(var i=0;i<this.provinces.length;i++)...{
SelectLevel.prototype[this.provinces[i].getAttribute(this.keyName)]=i;
selectProvince.options[i+1].value=this.provinces[i].getAttribute(this.keyName);
selectProvince.options[i+1].text=this.provinces[i].firstChild.data.trim();
if(this.provinces[i].getAttribute(this.keyName)==province)...{
selectProvince.options[i+1].selected=true;
var citys=this.provinces[i].getElementsByTagName(this.childName);
selectCity.options.length=citys.length+1;
for(var j=0;j<citys.length;j++)...{
selectCity.options[j+1].value=citys[j].getAttribute(this.keyName);
selectCity.options[j+1].text=citys[j].firstChild.data.trim();
if(citys[j].getAttribute(this.keyName)==city)...{
selectCity.options[j+1].selected=true;
}
}
}
}
parent.appendChild(selectProvince);
parent.appendChild(selectCity);
}
String.prototype.trim=function()...{
return this.replace(/^s*/g,"").replace(/s*$/g,"");
}
//测试
var newXML=new SelectLevel();
newXML.readXML("select.xml");
//newXML.iteratorXML(null,-2);
newXML.init(document.body,"sx","bj");
</script>