//删除select列表中选中的选项
function deleted(obj) {
if (obj == null) return;
if (obj.tagName != "SELECT") return;
for (var i=obj.options.length-1;i>=0;i--) {
if (obj.options[i].selected && obj.options[i].added) {
obj.removeChild(obj.options[i]);
}
}
}
//全选select列表中的选项
function selectAll(obj) {
if (obj == null) return;
if (obj.tagName != "SELECT") return;
var length = obj.options.length;
for (var i=0;i<length;i++) {
obj.options[i].selected = true;
}
}
//取消给定列表中的所有选中的选项
function selectNone(obj) {
if (obj == null) return;
if (obj.tagName != "SELECT") return;
var length = obj.options.length;
for (var i=0;i<length;i++) {
obj.options[i].selected = false;
}
}
//判断选项在列表中是否存在
function optionExists(obj,opt) {
var length = obj.options.length;
for (var i=0;i<length;i++) {
if(typeof obj.options[i].id != 'undefined' && typeof opt.id != "undefined" && obj.options[i].id == opt.id){
return true;
}else if (obj.options[i].text == opt.text && obj.options[i].value == opt.value){
return true;
}
}
return false; //如果不存在,则返回false
}
//将列表框fromList中选中的项添加到toList列表框中,不向toList中的添加重复项
function add(fromList,toList) {
for (var i=0;i<fromList.options.length;i++) {
if (fromList.options[i].selected) { //如果选项被选中,则需要加入到obj2中。
//进行重复性检查
//如果toList列表框中存在指定的选项,进行下一个循环
if (optionExists(toList,fromList.options[i])) {
continue;
}
var opt = fromList.options[i].cloneNode(false);
opt.text = fromList.options[i].text;
opt.value = fromList.options[i].value;
toList.options.add(opt); //将选项加入到toList中。
fromList.options[i].added = true;
}
}
}
//排序,obj为列表框对象,order为排序属性,desc为是否倒序(true-倒序),采用冒泡算法的改进算法
function orderList(obj,order,desc) {
var chg = null;
var flag = true; //是否进行过交换的标志
var m = null;
var n = null;
var len = obj.options.length - 1;
for (var j=len;j>0;j--) {
flag = true;
for (var k=0;k<j;k++) {
eval("m = parseFloat(obj.options[k]." + order + ");");
eval("n = parseFloat(obj.options[k+1]." + order + ");");
if (desc) { //如果是倒序排列,则交换m和n
var tt = m;
m = n;
n = tt;
}
if (m > n) { //如果m > n 交换两个选项
chg = obj.options[k].cloneNode(false);
chg.text = obj.options[k].text;
obj.options[k] = obj.options[k+1].cloneNode(false);
obj.options[k].text = obj.options[k+1].text;
obj.options[k+1] = chg.cloneNode(false);
obj.options[k+1].text = chg.text;
flag = false; //交换过,设为false
}
}
if (flag) break; //如果一次都没有交还,则退出
}
}
//事件处理
function doEvent(fromListId, toListId, isSelectAll) {
if(fromListId == toListId) return;
var fromList = document.getElementById(fromListId);
var toList = document.getElementById(toListId);
if (fromList == null || fromList.tagName != "SELECT" || toList == null || toList.tagName != "SELECT") return;
if (isSelectAll == true) { //如果需要全部选择
selectAll(fromList);
}
add(fromList, toList); //在toList中添加fromList中选中的项
deleted(fromList); //删除fromList移动到toList的选项
}
//处理单击事件
function doClick(fromListId, toListId, isAll) {
doEvent(fromListId, toListId, isAll);
}
//处理双击事件
function doDblClick(fromListId, toListId) {
doEvent(fromListId, toListId, false);
}