代碼解讀:
<html>
????<head>
????????<SCRIPT?language="Javascript"?src="../lib/prototype1.5.0_rc1/prototype.js"></SCRIPT>
????????<script?language="JavaScript"?src="../js/rlzy.js"?></script>
????????<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>
????</head>
????<div?id="div1"?style="background-color:#AABBFF;width:300px;height=300px"/>
????<body??onload="load()">??? //加載 時候由 id 完成各個動作,init等
????<table>
????????<tr>
????????????<td>
????????????????<select?id="ju">? //html 的想法是 寫好 id 占位置就完成任務
????????????????????<option?value="">--局選擇--</option>
????????????????</select>
????????????</td>
????????????<td/><td/>
????????</tr>
????????<tr>
????????????<td/>
????????????<td>
????????????????<input?type="button"?id="butn1"?value='?????????'/>
????????????</td>
????????????<td>
????????????????<select?id="selduju"/>
????????????</td>
????????</tr>
????????<tr>
????????????<td>
????????????????<select?id="du">
????????????????????<option?value=""?>--段選擇--</option>
????????????????</select>
????????????</td>
????????????<td/><td/>
????????<tr>
????</table>
????
????<input??type='button'??onclick="test()"?value="?test?"/> //提交后就得到一個選擇的value數組
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ???? //想干什么就不多提了
????</body>
</html>????
rlzy.js 解讀:
在開發的時候 用 $()? 在ie中有莫名其妙的問題 select 被選擇多次后 不見了 ? :(
/**
?*?@author?liukaiyi
?*/
var?domx?=?null;
var?sel1?=?'ju'
var?sel2?=?'du'
var?butn1?=?'butn1'
var?selduju?=?'selduju';
var?url?=??'../xml/doxml.xml'
var?rowName?=?'row';
var?key?=?'id';
var?vname?=?'name';
var?selkey?;
var?selvalue;
//異步得到數據
function?load(){????
????new?Ajax.Request(
????????url,
????????{
????????????method:?'get',
????????????onComplete:?action??????????????
????????});????
}
function?action(req){
????domx?=??req.responseXML
????init();
????setSelectju();
????document.getElementById(sel2).onchange?=?function(){
????????????butSele(document.getElementById(sel2));
????}
????document.getElementById(butn1).onclick?=?function(){
????????butClick();
????}
}
/////////////////////////////////////////////////////////////////////////
//????????????????????????????????頁面建設??????????????????????????? ///
/////////////////////////////////////////////////////////////////////////
//頁面?init
function?init(){
????document.getElementById(selduju).style.height?=?200;
????document.getElementById(selduju).style.width?=?100;
????document.getElementById(selduju).setAttribute('multiple','false');
????document.getElementById(selduju).ondblclick=?function(){
????????juduondblclick();
????}?
????
????var?domse1?=?document.getElementById(sel1)
????var?arr?=?SearchSize2(domx,rowName,key);
????for(var?i=0;i<arr.length;i++){
????????var?opt?=document.createElement('option');
????????var?text=document.createTextNode(?arr[i].getAttribute(vname)??);
?????????opt.appendChild(text);
????????opt.setAttribute("value",arr[i].getAttribute(key)?);
????????domse1.appendChild(opt);
????}
????
????
}
//局選擇的?select??添加?onchang?事件
function?setSelectju(){
????var?domse1?=?document.getElementById(sel1)
????domse1.onchange?=?function(){
????????butSele(domse1);
????????var?id?=?domse1.value?;
????????var?seldu?=?document.getElementById(sel2);
????????var?num?=?seldu.getElementsByTagName('option').length-1;?
????????
????????for(var?i=num;?i>0?;?i--)?
????????????seldu.remove(1);????????
????????var?arr?=?SearchPermanganic(domx,rowName,key,id);
????
????????for(var?i=0;i<arr.length;i++){
????????????var?opt?=document.createElement('option');
????????????var?text=document.createTextNode(?arr[i].getAttribute(vname)??);
?????????????opt.appendChild(text);
????????????opt.setAttribute("value",arr[i].getAttribute(key)?);
????????????seldu.appendChild(opt);
????????}
????????
????}
????
}
//提示是什么選擇
function?butSele(dom){
????var?va?=?dom.options[dom.selectedIndex?].firstChild.nodeValue?;
????var?skey?=?dom.options[?dom.selectedIndex?].value?
????var?but?=?document.getElementById(butn1)
????if(skey?!=null?||?skey?!=""){
????????but.setAttribute("bkey",skey);
????????but.setAttribute("bvalue",va);
????????but.value?=?"???"+va+"?>>>"????
????}
????if(skey?==?null?||?skey?==?""){
????????if(dom?==?document.getElementById(sel2)?){????
????????????if(?document.getElementById(sel1).options[dom.selectedIndex?].value?==?null??){
????????????????but.value?=?"????????"????
????????????????but.setAttribute("bkey","");
????????????????but.setAttribute("bvalue","");
????????????}else{
????????????????but.value?=??"???"+document.getElementById(sel1).options[document.getElementById(sel1).selectedIndex?].firstChild.nodeValue?;+"?>>>"????
????????????????domju?=?document.getElementById(sel1);
????????????????but.setAttribute("bkey",?domju.options[?domju.selectedIndex?].value?);
????????????????but.setAttribute("bvalue",domju.options[domju.selectedIndex?].firstChild.nodeValue?);
????????????}
????????}else?if(dom?==?document.getElementById(sel1)?){
????????????but.value?=?"????????"????
????????????but.setAttribute("bkey","");
????????????but.setAttribute("bvalue","");
????????}
????}
}
//but?onClick?事件
function?butClick(){
????var?bb?=?document.getElementById(butn1)
????var?judu?=?document.getElementById(selduju)
????var?key?=?bb.getAttribute("bkey")?;
????
????if(?key!=?null&&?key!=?""?){
????????var?opts?=?judu.options;
????????if(opts!=null?||??opts.length>=0)
????????for(var?i=0;i<opts.length;i++){
????????????if(?opts[i].value?==?key?)?return?false;?
????????}
????????
????????var?opt?=document.createElement('option');
????????var?text=document.createTextNode(?bb.getAttribute("bvalue")??);
?????????opt.appendChild(text);
????????opt.setAttribute("value",key?);
????????judu.appendChild(opt);
????}
}
//selduju去除?選項
function?juduondblclick(){
????var?dj?=?document.getElementById(selduju)?;
????var?sii?=??dj.selectedIndex
????if(sii>-1)
????dj.remove(??sii??);
}
//給出選擇
function?getSelectAll(){
????var?arr?=?new?Array();
????var?dj?=?document.getElementById(selduju)?;
????var?opts?=?dj.options;
????for(var?i=0;i<opts.length;i++){
????????arr[i]?=?opts[i].value;
????}
????return?arr?;
}
/////////////////////////////////////////////////////////////////////////
//????????????????????????????????工具??????????????????????????????????????///
/////////////////////////////////////////////////////////////////////////
//精確給出?Node
function?getNode(dom,name,attr,attrValue){
????var?list?=?dom.getElementsByTagName(name)?;
?????
????if(?attr?==?null??)?return?list.item(i);
?????
????for(var?i=0;?i<list.length;i++){
????????if(?list.item(i).getAttribute(attr)?==?attrValue?){
????????????return?list.item(i);
????????}????????
????}
????????
}
//模糊查找?id?包含?關系
function?SearchPermanganic(dom,name,attr,idp){
????var?arr?=?new?Array();?
????if(idp==null||idp=="")return?arr;
????
????var?list?=?dom.getElementsByTagName(name)?;
????var?j?=?0?;
????for(var?i=0;?i<list.length;i++){
????????var?id?=??list.item(i).getAttribute(attr)?;
????????if(?id.indexOf(?idp?)==0?&&?id?!=?idp){
????????????arr[j++]?=?list.item(i);
????????}????????
????}
????return?arr?;
}
//模糊查找?id?為?2?位的
function?SearchSize2(dom2,name2,attr){
????var?arr?=?new?Array();?
????var?list?=?dom2.getElementsByTagName(name2)?;
????var?j?=?0?;
????for(var?i=0;?i<list.length;i++){
????????var?id?=??list.item(i).getAttribute(attr)?;
????????if(?id.length?==?2??){
????????????arr[j++]?=?list.item(i);
????????}????????
????}
????return?arr?;
}
/////////////////////////////////////////////////////////////////////////
//????????????????????????????????test???????????????????????????????? ///
/////////////////////////////////////////////////////////////////////////
function?test(){
????window.alert(?getSelectAll()??);
}
數據:

<rows><row?id='1703'?name='武昌南機務段????'?/><row?id='1701'?name='襄樊北機務段????'?/><row?id='020701'?name='沈陽運用車間'?/><row?id='1144'?name='內江供電段????'?/><row?id='0101'?name='哈爾濱機務段????'?/><row?id='0172'?name='齊齊哈爾水電段????'?/><row?id='1471'?name='烏魯木齊水電段????'?/><row?id='1644'?name='茶塢供電段????'?/><row?id='1601'?name='太原機務段????'?/><row?id='00'?name='鐵道部'?/><row?id='0301'?name='北京機務段????'?/><row?id='0171'?name='哈爾濱水電段????'?/><row?id='0601'?name='濟南機務段????'?/><row?id='0346'?name='邯鄲供電段????'?/><row?id='1141'?name='成都供電段????'?/><row?id='1041'?name='南寧供電段????'?/><row?id='1473'?name='庫爾勒水電段????'?/><row?id='1142'?name='西昌供電段????'?/><row?id='1603'?name='侯馬北機務段????'?/><row?id='1143'?name='重慶供電段????'?/><row?id='0102'?name='三棵樹機務段????'?/><row?id='0744'?name='合肥供電段????'?/><row?id='1003'?name='南寧機務段????'?/><row?id='1104'?name='重慶南機務段????'?/><row?id='0801'?name='南昌機務段????'?/><row?id='1474'?name='奎屯水電段????'?/><row?id='0707'?name='南京東機務段????'?/><row?id='030201'?name='車間tt'?/><row?id='0504'?name='洛陽機務段????'?/><row?id='1641'?name='太原供電段????'?/><row?id='0802'?name='向塘機務段????'?/><row?id='1241'?name='昆明供電段????'?/><row?id='0341'?name='北京西供電段????'?/><row?id='0205'?name='蘇家屯機務段????'?/><row?id='1642'?name='候馬北供電段????'?/><row?id='0207'?name='沈陽機務段????'?/><row?id='0174'?name='佳木斯水電段????'?/><row?id='0602'?name='濟南西機務段????'?/><row?id='1145'?name='貴陽供電段????'?/><row?id='0841'?name='福州供電段????'?/><row?id='13'?name='蘭州鐵路局'?/><row?id='0302'?name='豐臺機務段????'?/><row?id='1341'?name='蘭州供電段????'?/><row?id='0344'?name='豐臺供電段????'?/><row?id='0609'?name='徐州北機務段????'?/><row?id='0741'?name='杭州供電段????'?/><row?id='1342'?name='武威供電段????'?/><row?id='0702'?name='合肥機務段????'?/><row?id='1602'?name='太原北機務段????'?/><row?id='17'?name='武漢鐵路局'?/><row?id='14'?name='烏魯木齊鐵路局'?/><row?id='0471'?name='呼和水電段????'?/><row?id='1704'?name='江岸機務段????'?/><row?id='0215'?name='錦州機務段????'?/><row?id='1107'?name='貴陽機務段????'?/><row?id='16'?name='太原鐵路局'?/><row?id='0271'?name='沈陽水電段????'?/><row?id='15'?name='青藏鐵路公司'?/><row?id='0113'?name='齊齊哈爾機務段????'?/><row?id='0711'?name='杭州機務段????'?/><row?id='1741'?name='襄樊供電段????'?/><row?id='030803'?name='3'?/><row?id='0643'?name='徐州供電段????'?/><row?id='1605'?name='湖東機務段????'?/><row?id='1742'?name='漢口供電段????'?/><row?id='020702'?name='山海關運用車間'?/><row?id='1472'?name='哈密水電段????'?/><row?id='0302u9'?name='u8'?/><row?id='1201'?name='昆明機務段????'?/><row?id='0342'?name='天津供電段????'?/><row?id='04'?name='呼和浩特鐵路局'?/><row?id='0710'?name='上海機務段????'?/><row?id='0942'?name='長沙供電段????'?/><row?id='0401'?name='包頭西機務段????'?/><row?id='0805'?name='福州機務段????'?/><row?id='0941'?name='廣州供電段????'?/><row?id='1802'?name='新豐鎮機務段????'?/><row?id='0273'?name='錦州水電段????'?/><row?id='0224'?name='吉林機務段????'?/><row?id='07'?name='上海鐵路局'?/><row?id='1803'?name='西安機務段????'?/><row?id='0272'?name='長春水電段????'?/><row?id='030802'?name='ts車間2'?/><row?id='0308'?name='唐山機務段????'?/><row?id='0241'?name='沈陽供電段????'?/><row?id='0503'?name='新鄉機務段????'?/><row?id='06'?name='濟南鐵路局'?/><row?id='0345'?name='豐潤供電段????'?/><row?id='05'?name='鄭州鐵路局'?/><row?id='0306'?name='懷柔北機務段????'?/><row?id='0274'?name='大連水電段????'?/><row?id='0642'?name='青島供電段????'?/><row?id='08'?name='南昌鐵路局'?/><row?id='1401'?name='烏魯木齊機務段????'?/><row?id='0542'?name='新鄉供電段????'?/><row?id='1843'?name='寶雞供電段????'?/><row?id='0343'?name='石家莊供電段????'?/><row?id='18'?name='西安鐵路局'?/><row?id='1743'?name='信陽供電段????'?/><row?id='1109'?name='六盤水機務段????'?/><row?id='1844'?name='漢中供電段????'?/><row?id='0275'?name='通遼水電段????'?/><row?id='0501'?name='鄭州機務段????'?/><row?id='1804'?name='安康機務段????'?/><row?id='0276'?name='吉林水電段????'?/><row?id='1501'?name='西寧機務段????'?/><row?id='0704'?name='阜陽機務段????'?/><row?id='0220'?name='通遼機務段????'?/><row?id='1842'?name='安康供電段????'?/><row?id='01'?name='哈爾濱鐵路局'?/><row?id='0317'?name='石家莊電力機務段'?/><row?id='0943'?name='衡陽供電段????'?/><row?id='1102'?name='成都機務段????'?/><row?id='1146'?name='凱里供電段????'?/><row?id='1303'?name='嘉峪關機務段????'?/><row?id='1302'?name='蘭州西機務段????'?/><row?id='1841'?name='西安供電段????'?/><row?id='0743'?name='上海供電段????'?/><row?id='030806'?name='6'?/><row?id='0404'?name='集寧機務段????'?/><row?id='0173'?name='牡丹江水電段????'?/><row?id='0541'?name='鄭州供電段????'?/><row?id='11'?name='成都鐵路局'?/><row?id='12'?name='昆明鐵路局'?/><row?id='0277'?name='梅河口水電段????'?/><row?id='1402'?name='庫爾勒機務段????'?/><row?id='02'?name='沈陽鐵路局'?/><row?id='0742'?name='南京供電段????'?/><row?id='1304'?name='迎水橋機務段????'?/><row?id='0543'?name='洛陽供電段????'?/><row?id='0901'?name='廣州機務段????'?/><row?id='1203'?name='開遠機務段????'?/><row?id='1343'?name='銀川供電段????'?/><row?id='0175'?name='海拉爾水電段????'?/><row?id='0944'?name='懷化供電段????'?/><row?id='0641'?name='濟南供電段????'?/><row?id='03'?name='北京鐵路局'?/><row?id='0902'?name='懷化機務段????'?/><row?id='10'?name='柳州鐵路局'?/><row?id='030801'?name='ts車間1'?/><row?id='1643'?name='大同供電段????'?/><row?id='0108'?name='牡丹江機務段????'?/><row?id='09'?name='廣州鐵路公司'?/><row?id='1071'?name='柳州水電段????'?/><row?id='1571'?name='西寧水電段????'?/><row?id='1001'?name='柳州機務段????'?/><row?id='0903'?name='株洲機務段????'?/></rows>
心得:開發中不管有多緊,原則不能逾越? 重構(減少重復) 提升類,方法地位