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

Javascript
web开发设计师比较费解的JavaScript
jQuery教程:整理的几个常见的初学者问题
免费资源:7个效果非常棒的jQuery 3D效果插件
JavaScript教程:编写匿名函数的几种方法
jQuery教程:jQuery的核心
jQuery教程:jQuery核心方法的使用
webjx收集45个jQuery导航插件和教程
30个气泡悬浮框(Tooltip)的jQuery插件
Jetpack扩展案例:Gmail邮件提醒功能
非常出色的jQuery运动特效可以和Flash媲美
ImagesLazyLoad 图片延迟加载效果
收集国外的14个图片放大编辑的jQuery插件
修改和创建DOM节点两种方式的4种优化方案
jQuery.Switchable整合插件用途介绍
提高Textarea操作性能优秀的jQuery插件
WEBJX收集12个非常有创意的JavaScript小游戏
Javascript教程:关于深入了解JS的几个问题

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 274 ::
收藏到网摘: 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>