手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >JavaScript XML实现两级级联下拉列表
JavaScript XML实现两级级联下拉列表
摘要:1.创建测试XML文件:select.xml复制代码代码如下:陕西西安宝鸡安康江苏南京徐州上海2.创建HTML页面:select.html复...

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>

【JavaScript XML实现两级级联下拉列表】相关文章:

用JavaScript实现对话框的教程

JavaScript实现单击下拉框选择直接跳转页面的方法

JavaScript实现将UPC转换成ISBN的方法

基于JavaScript实现动态添加删除表格的行

javascript 动态添加表格行

JavaScript中的pow()方法使用

JavaScript 预解析的原理及实现

JavaScript实现简单的数字倒计时

Javascript实现广告页面的定时关闭

JavaScript实现添加、查找、删除元素

精品推荐
分类导航