<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
/*
*
*WRITE BY :惠万鹏
*DATE :2008-06-10
*VERSION :1.0
*DESCRIPTION:
*/
var
SelUtil
=
{
/*
*
*对二维数组进行排序
*arr :将要排序的数组
*dimIndex :按第几维排序,可选值0或1
*ascOrDexc:按升序或降序,可先值为0或1
*返回一个已经排好序的数组
*/
__sortDyadicArray :
function
(arr, dimIndex, ascOrDesc)
{
var
tempArr
=
null
;
/*
* 使用选择排序法排序
*/
for
(
var
m
=
0
; m
<
arr.length
-
1
; m
++
)
{
var
index
=
m;
for
(
var
n
=
m
+
1
; n
<
arr.length; n
++
){
/*
* 按第一维升序排序
*/
if
(dimIndex
==
0
&&
ascOrDesc
==
0
&&
arr
[
n
][
0
]
<
arr
[
index
][
0
]
)
{
index
=
n;
}
/*
* 按第一维降序排列
*/
else
if
(dimIndex
==
0
&&
ascOrDesc
==
1
&&
arr
[
n
][
0
]
>
arr
[
index
][
0
]
)
{
index
=
n;
}
/*
* 按第二维升序排序
*/
else
if
(dimIndex
==
1
&&
ascOrDesc
==
0
&&
arr
[
n
][
1
]
<
arr
[
index
][
1
]
)
{
index
=
n;
}
/*
* 按第二维降序排列
*/
else
if
(dimIndex
==
1
&&
ascOrDesc
==
1
&&
arr
[
n
][
1
]
>
arr
[
index
][
1
]
)
{
index
=
n;
}
}
tempArr
=
arr
[
m
]
;
arr
[
m
]
=
arr
[
index
]
;
arr
[
index
]
=
tempArr;
}
return
arr;
},
/*
*向Sel中加入一项
*oListbox:列表对象
*sName :Listbox文本
*sValue :Listbox值
*/
__
add
:
function
(oListbox, sValue, sName, sInitValue)
{
var
oOption
=
document.createElement("
option
");
oOption.appendChild(document.createTextNode(sName));
if
(arguments.length
==
4
)
{
oOption.setAttribute("value",sValue);
if
(sValue
==
sInitValue)
{
oOption.setAttribute("selected",true);
}
oListbox.appendChild(oOption);
}
},
/*
*
*从二维数中加入多个option
*oListbox :列表对象
*dyadicArray:二维数组
*/
__addAll :
function
(oListbox, dyadicArray, sSelected)
{
for
(
var
i
=
0
; i
<
dyadicArray.length; i
++
)
{
this.__
add
(oListbox, dyadicArray
[
i
][
0
]
, dyadicArray
[
i
][
1
]
, sSelected);
}
},
/*
*从Sel中删除一项
*oListbox:列表对象
*iIndex :项的索引号
*/
__remove :
function
(oListbox, iIndex)
{
oListbox.remove(iIndex);
},
/*
*清空Sel的所有项
*oListbox:列表对象
*/
__clear :
function
(oListbox)
{
for
(
var
i
=
oListbox.options.length
-
1
; i
>=
0
; i
--
)
{
this.__remove(oListbox, i);
}
},
/*
*
*两个Sel中相互移动
*oListboxFrom:将要被移除的列表
*oListboxTo :将要被移到的列表
*iIndex :项的索引号
*/
__move :
function
(oListboxFrom, oListboxTo, iIndex)
{
var
oOption
=
oListboxFrom.options(iIndex);
if
(oOption
!==
null
)
{
oListboxTo.appendChild(oOption);
}
},
/*
*
*把所有选中的项移到另一个列表
*oListboxFrom:将要被移到的列表
*oListboxTo :将要被移到的列表
*/
__moveAll :
function
(oListboxFrom, oListboxTo,type)
{
var
indexes
=
this.__getIndexes(oListboxFrom,type);
for
(
var
i
=
indexes.length
-
1
; i
>=
0
; i
--
)
{
this.__move(oListboxFrom, oListboxTo, indexes
[
i
]
);
}
},
/*
*
*把指定索引的项上移一个位置
*oListbox:列表对象
*iIndex :索引号
*/
__shiftUp :
function
(oListbox, iIndex)
{
if
(iIndex
>
0
)
{
var
oOption
=
oListbox.options
[
iIndex
]
;
var
oPrevOption
=
oListbox.options
[
iIndex - 1
]
;
oListbox.insertBefore(oOption, oPrevOption);
}
},
/*
*
*把指定索引的项下移一个位置
*oListbox:列表对象
*iIndex :索引号
*/
__shiftDown :
function
(oListbox, iIndex)
{
if
(iIndex
<
oListbox.options.length
-
1
)
{
var
oOption
=
oListbox.options
[
iIndex
]
;
var
oNextOption
=
oListbox.options
[
iIndex + 1
]
;
oListbox.insertBefore(oNextOption, oOption);
}
},
/*
*
*得到选中的索引
*oListbox:列表对像
*type :可选值:1选中的index,0全部index,-1没选中的index
*/
__getIndexes :
function
(oListbox, type)
{
var
arrIndexes
=
new Array;
for
(
var
i
=
0
; i
<
oListbox.options.length; i
++
)
{
if
(type
==
1
)
{
if
(oListbox.options
[
i
]
.selected)
{
arrIndexes.push(i);
}
}
else
if
(type
==
0
)
{
arrIndexes.push(i);
}
else
if
(type
==
-
1
)
{
if
(!oListbox.options
[
i
]
.selected)
{
arrIndexes.push(i);
}
}
}
return
arrIndexes;
},
/*
*
*把一个字符串转换成一个二维数组
*str:带有分隔符的字符串
*/
__strToDyadicArray :
function
(
str
)
{
var
kvs
=
str
.split(
'
|
'
);
var
dyadicArray
=
new Array(kvs.length);
for
(
var
i
=
0
; i
<
kvs.length; i
++
)
{
dyadicArray
[
i
]
=
new Array(
2
);
dyadicArray
[
i
][
0
]
=
kvs
[
i
]
.
substring
(
0
, kvs
[
i
]
.indexOf(":"));
dyadicArray
[
i
][
1
]
=
kvs
[
i
]
.
substring
(kvs
[
i
]
.indexOf(":")
+
1
, kvs
[
i
]
.length);
}
return
dyadicArray;
},
/*
*
*初始化一个Sel
*SelId :Sel的id
*str :初始化字符串
*sDefault:默认值
*/
initSel :
function
(selId,
str
, sSelected)
{
if
(
str
.length
>
0
)
{
var
kvs
=
this.__strToDyadicArray(
str
);
oSel
=
document.getElementById(selId);
this.__addAll(oSel,kvs,sSelected);
}
},
/*
*
*初始化两个Sel
*selLeftId :左边Sel的id
*selRightId:右边Sel的id
*strLeft :左边初始化字符串
*strRight :右边初始化字符串
*/
initDouSel :
function
(selLeftId, selRightId, strLeft, strRight)
{
this.initSel(selLeftId, strLeft,
'
XXXX
'
);
this.initSel(selRightId, strRight,
'
XXXX
'
);
},
/*
*
*左边全部移到右边
*selLeftId :左边列表id
*selRightId:右边列表id
*bla :button left all
*blp :button left part
*bra :button right all
*brp :button right part
*/
leftSelToRightSelAll :
function
(selLeftId, selRightId, bla, blp, bra, brp)
{
var
oSelLeft
=
document.getElementById(selLeftId);
var
oSelRight
=
document.getElementById(selRightId);
this.__moveAll(oSelLeft,oSelRight,
0
);
document.getElementById(bla).disabled
=
true;
document.getElementById(blp).disabled
=
true;
document.getElementById(bra).disabled
=
false;
document.getElementById(brp).disabled
=
false;
},
/*
*
*左边选中的项全部移到右边
*selLeftId :左边列表id
*selRightId:右边列表id
*bla :button left all
*blp :button left part
*bra :button right all
*brp :button right part
*/
leftSelToRightSelPart :
function
(selLeftId, selRightId, bla, blp, bra, brp)
{
var
oSelLeft
=
document.getElementById(selLeftId);
var
oSelRight
=
document.getElementById(selRightId);
this.__moveAll(oSelLeft,oSelRight,
1
);
if
(this.__getIndexes(oSelLeft,
0
).length
==
0
)
{
document.getElementById(bla).disabled
=
true;
document.getElementById(blp).disabled
=
true;
}
else
{
document.getElementById(bla).disabled
=
false;
document.getElementById(blp).disabled
=
false;
}
document.getElementById(bra).disabled
=
false;
document.getElementById(brp).disabled
=
false;
},
/*
*
*右边全部移到左边
*selLeftId :左边列表id
*selRightId:右边列表id
*bla :button left all
*blp :button left part
*bra :button right all
*brp :button right part
*/
rightSelToleftSelAll :
function
(selLeftId, selRightId, bla, blp, bra, brp)
{
var
oSelLeft
=
document.getElementById(selLeftId);
var
oSelRight
=
document.getElementById(selRightId);
this.__moveAll(oSelRight,oSelLeft,
0
);
document.getElementById(bra).disabled
=
true;
document.getElementById(brp).disabled
=
true;
document.getElementById(bla).disabled
=
false;
document.getElementById(blp).disabled
=
false;
},
/*
*
*左边选中的项全部移到右边
*selLeftId :左边列表id
*selRightId:右边列表id
*bla :button left all
*blp :button left part
*bra :button right all
*brp :button right part
*/
rightSelToLeftSelPart :
function
(selLeftId, selRightId, bla, blp, bra, brp)
{
var
oSelLeft
=
document.getElementById(selLeftId);
var
oSelRight
=
document.getElementById(selRightId);
this.__moveAll(oSelRight, oSelLeft,
1
);
if
(this.__getIndexes(oSelRight,
0
).length
==
0
)
{
document.getElementById(bra).disabled
=
true;
document.getElementById(brp).disabled
=
true;
}
else
{
document.getElementById(bra).disabled
=
false;
document.getElementById(brp).disabled
=
false;
}
document.getElementById(bla).disabled
=
false;
document.getElementById(blp).disabled
=
false;
}
}
使用方法:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
<
html
>
<
head
>
<
title
>
Two-Select
</
title
>
<
script
language
="javascript"
src
="/SelUtil.js"
charset
="gb2312"
></
script
>
</
head
>
<
body
>
<
select
id
="s1"
style
="width:80;height:100;float:left"
multiple
></
select
>
<
div
style
="width:50;height:100;margin:5px;float:left;text-align:center;"
>
<
input
type
="button"
id
="b1"
class
="b1"
value
=">>"
onclick
="SelUtil.leftSelToRightSelAll('s1','s2','b1','b2','b3','b4')"
>
<
input
type
="button"
id
="b2"
class
="b2"
value
=">"
onclick
="SelUtil.leftSelToRightSelPart('s1','s2','b1','b2','b3','b4')"
>
<
input
type
="button"
id
="b3"
class
="b3"
value
="<"
onclick
="SelUtil.rightSelToLeftSelPart('s1','s2','b1','b2','b3','b4')"
>
<
input
type
="button"
id
="b4"
class
="b4"
value
="<<"
onclick
="SelUtil.rightSelToleftSelAll('s1','s2','b1','b2','b3','b4')"
>
</
div
>
<
select
id
="s2"
style
="width:80;height:100"
multiple
></
select
>
<
script
language
='javascript'
>
var
str1
=
"
1:赵云|2:张辽|3:典韦
"
;
var
str2
=
"
4:吕布|5:张飞|6:关羽
"
;
document.body.onload
=
function
()
{
SelUtil.initDouSel(
"
s1
"
,
"
s2
"
,str1,str2);
}
</
script
>
</
body
>
</
html
>