代码解读:
<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='