jquery之双下拉框

仿照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>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值