JavaScript XML实现两级级联下拉列表


Posted in Javascript onNovember 10, 2008

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 相关文章推荐
关于JavaScript的gzip静态压缩方法
Jan 05 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
分类解析jQuery选择器
Nov 23 Javascript
Javascript之面向对象--接口
Dec 02 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
Aug 14 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
vue中$refs, $emit, $on, $once, $off的使用详解
May 26 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
js wmp操作代码小结(音乐连播功能)
Nov 08 #Javascript
js 目录列举函数
Nov 06 #Javascript
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 #Javascript
ext读取两种结构的xml的代码
Nov 05 #Javascript
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 #Javascript
js form action动态修改方法
Nov 04 #Javascript
JS 继承实例分析
Nov 04 #Javascript
You might like
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
Angular 表单控件示例代码
2017/06/26 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python任务调度实例分析
2015/05/19 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python实现机器学习之多元线性回归
2018/09/06 Python
Python如何发布程序的详细教程
2018/10/09 Python
python实现桌面托盘气泡提示
2019/07/29 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
夏季药店促销方案
2014/08/22 职场文书
党在我心中演讲稿
2014/09/02 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
现货白银电话营销话术
2015/05/29 职场文书
九年级英语教学反思
2016/02/15 职场文书
同学联谊会邀请函
2019/06/24 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
mysql序号rownum行号实现方式
2022/12/24 MySQL