仿照doublebox-boostrap的功能写的一个双边栏选择框,主要实现:左右互移,模糊查询
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jquery之双下拉框</title>
<style type="text/css">
.select1 {
width: 200px;
min-height: 150px;
display: block;
}
.select2 {
width: 200px;
min-height: 150px;
display: block;
}
.btn {
margin: auto 10px;
}
.btn button {
display: block;
margin-top: 10px;
}
.doubleBox {
display: flex;
align-items: center;
justify-content: center;
margin-top: 120px;
}
.doubleInput {
width: 200px;
height: 24px;
outline: none;
border-radius: 4px;
margin-bottom: 10px;
border: 1px solid #ddd;
}
.hide {
display: none;
}
.show {
display: block;
}
</style>
</head>
<body>
<div class="doubleBox">
<div class="leftBox">
<input type="text" class="leftInput doubleInput" />
<select class="select1" multiple="multiple">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</div>
<div class="btn">
<button class="btn_add">右移>></button>
<button class="btn_delete"><<左移</button>
</div>
<div class="rightBox">
<input type="text" class="rightInput doubleInput" />
<select class="select2" multiple="multiple">
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
</select>
</div>
</div>
<script src="js/jquery.js"></script>
<script>
$(function() {
//左侧查询
$(".leftInput").keyup(function() {
var serachInput = $(".leftInput").val();
var selectOption = $(".select1").find('option');
$(".select1>option").attr("disabled", false);
if(serachInput == '') {
$(selectOption).addClass('show');
for(var i = 0; i < selectOption.length; i++) {
if($(selectOption[i]).attr('data-sec') == 'hide') {
//隐藏属于右侧的
$(selectOption[i]).addClass('hide');
$(selectOption[i]).removeClass('show');
}
}
return;
}
//如果填了,先将所有的选项隐藏
$(selectOption).addClass('hide');
$(selectOption).removeClass('show');
for(var i = 0; i < selectOption.length; i++) {
//如果属于左侧
if($(selectOption[i]).attr('data-sec') != 'hide') {
//模糊匹配,将所有匹配项显示
if(selectOption.eq(i).text().indexOf(serachInput) != -1) {
selectOption.eq(i).addClass('show');
}
} else {
//隐藏属于右侧的
$(selectOption[i]).addClass('hide');
$(selectOption[i]).removeClass('show');
}
}
});
//右侧查询
$(".rightInput").keyup(function() {
var serachInput = $(".rightInput").val();
var selectOption = $(".select2").find('option');
if(serachInput == '') {
$(selectOption).addClass('show');
return;
}
//如果填了,先将所有的选项隐藏
$(selectOption).addClass('hide');
$(selectOption).removeClass('show');
for(var i = 0; i < selectOption.length; i++) {
//模糊匹配,将所有匹配项显示
if(selectOption.eq(i).text().indexOf(serachInput) != -1) {
selectOption.eq(i).addClass('show');
}
//模糊匹配,只匹配第一位,将所有匹配项显示
// if(selectOption.eq(i).text().substr(0, serachInput.length) == serachInput) {
// selectOption.eq(i).addClass('show');
// }
}
// 精确匹配
// for(var j = 0; j < selectOption.length; j++) {
// if(serachInput == selectOption[j].value) {
// $(selectOption[j]).siblings().addClass('hide');
// $(selectOption[j]).addClass('show');
// } else {
// $(selectOption[j]).addClass('hide');
// $(selectOption[j]).removeClass('show');
// }
//
// }
});
//右移
$(".btn_add").on("click", function() {
$(".select1 option:selected").clone().appendTo(".select2");
$(".select1 option:selected").removeClass("show");
$(".select1 option:selected").addClass("hide");
$(".select1 option:selected").attr('data-sec', 'hide');
});
//左移
$(".btn_delete").on("click", function() {
//获取右侧所有选中的option
var selectedItem = $(".select2").find('option:selected');
//获取左侧所有option
var leftOption = $(".select1").find('option');
//遍历2个select下的option的值,进行匹配
for(var i = 0; i < selectedItem.length; i++) {
for(var j = 0; j < leftOption.length; j++) {
if(selectedItem[i].value == leftOption[j].value) {
$(leftOption[j]).addClass("show");
$(leftOption[j]).attr('data-sec', '');
$(selectedItem[i]).remove();
} else {
$(".select2 option:selected").appendTo(".select1");
}
}
}
});
})
</script>
</body>
</html>