1.创建测试XML文件:select.xml
2.创建HTML页面:select.html
http://blog.csdn.net/lip009/archive/2007/10/15/1825960.aspx
- <?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;mm=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){
- citycity.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){
- thisthis.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 newnewXML=new SelectLevel();
- newXML.readXML("select.xml");
- newXML.iteratorXML(null,-2);
- newXML.init(document.body,"sx","bj");
- </script>
http://blog.csdn.net/lip009/archive/2007/10/15/1825960.aspx