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 相关文章推荐
js里怎么取select标签里的值并修改
Dec 10 Javascript
js与jquery回车提交的方法
Feb 03 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
ionic选择多张图片上传的示例代码
Oct 10 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
在vue中实现给每个页面顶部设置title
Jul 29 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
javascript生成大小写字母
2015/07/03 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
Python对数据库操作
2016/03/28 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
银行类自荐信
2014/02/04 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android