代码解读:
<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>
心得:开发中不管有多紧,原则不能逾越 重构(减少重复) 提升类,方法地位