JavaScript XML實(shí)現(xiàn)兩級(jí)級(jí)聯(lián)下拉列表
更新時(shí)間:2008年11月10日 00:20:39 作者:
用xml作為存儲(chǔ)容器,不用數(shù)據(jù)庫,速度和效率高些。
1.創(chuàng)建測(cè)試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.創(chuàng)建HTML頁面:select.html
<body>
</body>
<script>...
/**//**
* @description 二級(jí)級(jí)聯(lián)下拉
* @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";//父節(jié)點(diǎn)名稱
SelectLevel.prototype.childName="city";//子節(jié)點(diǎn)名稱
SelectLevel.prototype.keyName="id";//屬性
/**//**
* 對(duì)象SelectLevel的構(gòu)造器
* @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;
//如果它受支持,采用標(biāo)準(zhǔn)的2級(jí)DOM技術(shù)
if(document.implementation && document.implementation.createDocument)...{
//創(chuàng)建新的Document對(duì)象
selectXML=document.implementation.createDocument("","",null);
//設(shè)置裝載完畢時(shí)觸發(fā)事件
selectXML.onload=function()...{
alert("加載完成");
}
selectXML.load(url);
}else...{//IE瀏覽器創(chuàng)建Document對(duì)象
selectXML=new ActiveXObject("Microsoft.XMLDOM");
//設(shè)置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);
}
}
}
/**//**
* 下拉聯(lián)動(dòng)
* @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="請(qǐng)選擇…";
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="請(qǐng)選擇…";
selectCity.setAttribute("name",this.childName);
selectCity.setAttribute("id",this.childName);
selectCity.options.length=1;
selectCity.options[0].text="請(qǐng)選擇…";
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,"");
}
//測(cè)試
var newXML=new SelectLevel();
newXML.readXML("select.xml");
//newXML.iteratorXML(null,-2);
newXML.init(document.body,"sx","bj");
</script>
復(fù)制代碼 代碼如下:
<?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.創(chuàng)建HTML頁面:select.html
復(fù)制代碼 代碼如下:
<body>
</body>
<script>...
/**//**
* @description 二級(jí)級(jí)聯(lián)下拉
* @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";//父節(jié)點(diǎn)名稱
SelectLevel.prototype.childName="city";//子節(jié)點(diǎn)名稱
SelectLevel.prototype.keyName="id";//屬性
/**//**
* 對(duì)象SelectLevel的構(gòu)造器
* @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;
//如果它受支持,采用標(biāo)準(zhǔn)的2級(jí)DOM技術(shù)
if(document.implementation && document.implementation.createDocument)...{
//創(chuàng)建新的Document對(duì)象
selectXML=document.implementation.createDocument("","",null);
//設(shè)置裝載完畢時(shí)觸發(fā)事件
selectXML.onload=function()...{
alert("加載完成");
}
selectXML.load(url);
}else...{//IE瀏覽器創(chuàng)建Document對(duì)象
selectXML=new ActiveXObject("Microsoft.XMLDOM");
//設(shè)置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);
}
}
}
/**//**
* 下拉聯(lián)動(dòng)
* @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="請(qǐng)選擇…";
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="請(qǐng)選擇…";
selectCity.setAttribute("name",this.childName);
selectCity.setAttribute("id",this.childName);
selectCity.options.length=1;
selectCity.options[0].text="請(qǐng)選擇…";
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,"");
}
//測(cè)試
var newXML=new SelectLevel();
newXML.readXML("select.xml");
//newXML.iteratorXML(null,-2);
newXML.init(document.body,"sx","bj");
</script>
您可能感興趣的文章:
- JavaScript實(shí)現(xiàn)下拉列表框數(shù)據(jù)增加、刪除、上下排序的方法
- JavaScript實(shí)現(xiàn)對(duì)下拉列表值進(jìn)行排序的方法
- JavaScript實(shí)現(xiàn)常用二級(jí)省市級(jí)聯(lián)下拉列表的方法
- javascript為下拉列表動(dòng)態(tài)添加數(shù)據(jù)項(xiàng)
- javascript對(duì)下拉列表框(select)的操作實(shí)例講解
- javascript級(jí)聯(lián)下拉列表實(shí)例代碼(自寫)
- javascript實(shí)現(xiàn)樹形菜單的方法
- javascript 樹形導(dǎo)航菜單實(shí)例代碼
- 一個(gè)簡(jiǎn)單的js樹形菜單
- javascript實(shí)現(xiàn)在下拉列表中顯示多級(jí)樹形菜單的方法
相關(guān)文章
echarts餅圖各個(gè)板塊之間的空隙如何實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于echarts餅圖各個(gè)板塊之間的空隙如何實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12無語,javascript居然支持中文(unicode)編程!
無語,javascript居然支持中文(unicode)編程!...2007-04-04js與jquery獲取父級(jí)元素,子級(jí)元素,兄弟元素的實(shí)現(xiàn)方法
本篇文章主要是對(duì)js與jquery獲取父級(jí)元素,子級(jí)元素,兄弟元素的實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01wangEditor富文本編譯器插件學(xué)習(xí)系列之工具欄配置
這篇文章主要給大家介紹了關(guān)于wangEditor富文本編譯器插件學(xué)習(xí)系列之工具欄配置的相關(guān)資料,wangEditor是一款基于原生JavaScript封裝,開源免費(fèi)的富文本編輯器,支持常規(guī)的文字排版操作、插入圖片、插入視頻、插入代碼等功能,需要的朋友可以參考下2023-12-12鼠標(biāo)拖拽移動(dòng)子窗體的JS實(shí)現(xiàn)
這篇文章主要介紹了鼠標(biāo)拖拽移動(dòng)子窗體的JS實(shí)現(xiàn),需要的朋友可以參考下2014-02-02JavaScript實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘實(shí)例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘實(shí)例代碼,有需要的朋友可以參考一下2013-11-11