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 相关文章推荐
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 Javascript
深入理解JavaScript中的预解析
Jan 04 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
vue.js 获取当前自定义属性值
Jun 01 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
vue界面发送表情的实现代码
Sep 11 Javascript
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
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
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
php实现文章评论系统
2019/02/18 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
jquery的each方法使用示例分享
2014/03/25 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
vue组件实例解析
2017/01/10 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python常见工厂函数用法示例
2018/03/21 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
如何进行Linux分区优化
2013/02/12 面试题
开学典礼感言
2014/02/16 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android