HTML

<div class="main">
			<div class="left box">
				<h3>列表一</h3>
				<ul id="clickLeft" class="select">
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 1</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 2</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 3</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 4</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 5</span></li>
				</ul>
			</div>
			<div class="operation">
				<span class="btn toleft "> --> </span>
				<span class="btn toright"> <-- </span>
			</div>
			<div class="right box">
				<h3>列表二</h3>
				<ul id="clickRight" class="select">
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 7</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 8</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 9</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 10</span></li>
					<li><input type="checkbox"><span>穿梭框列表内容 ---- 11</span></li>
				</ul>
			</div>
		</div>

css

* {
	font-size: 14px;
}

ul {
	list-style: none;
	padding: 0;
	margin: 0;
}

.main {
	width: 500px;
	margin: 20px auto;
	display: flex;
}

.box {
	position: relative;
	width: 220px;
	min-height: 350px;
	border: 1px solid #d9d9d9;
	border-radius: 3px;
	background: #fff;
}

.operation {
	padding: 107px 20px 0 40px;
}

.operation span {
	display: block;
	width: 43px;
	height: 28px;
	text-align: center;
	position: relative;
	cursor: pointer;
	border: 1px solid #d9d9d9;
	border-radius: 4px;
}

h3 {
	text-align: center;
	border-bottom: 1px solid #ddd;
}

.select li {
	padding: 10px 8px;
}


.current {
	background-color: #1890FF;
	color: #FFFFFF;
}

.operation span:hover {
	background-color: #1890FF;
	color: #FFFFFF;
}

JS

方法一:

//  	定义全局变量
		var list = []; //存储选框中的列表
		var flag = "left"; //定义标记判断是选中左边还是右边
		var checklist = 0; //存储input框选中数量
		//穿梭框左侧选中
		//任务1:步骤2——给左侧列表中的单选框,绑定点击事件
		$("#clickLeft input").click(function() {
			flag = "left";
			onCurrent(flag)
		});
		//穿梭框右侧选中
		//任务1:步骤3——给右侧列表中的单选框,绑定点击事件
		$("#clickRight input").click(function() {
			flag = "right";
			onCurrent(flag)
		});
		//向左移动
		$(".toleft").click(function() {
			//任务2:步骤1——获取左侧input框数组集合
			list = $("#clickLeft input");		
			//任务2:步骤2——获取左侧input框 选中 数量
			checklist = $("#clickLeft input:checkbox:checked ");
			flag = "left";
			if (checklist.length > 0) {
				takelist(flag);
			}
		});
		//向右移动
		$(".toright").click(function() {
			//任务2:步骤3——获取右侧input框数组集合
			list = $("#clickRight input");
			//任务2:步骤4——获取右侧input框 选中 数量
			checklist = $("#clickRight input:checkbox:checked ");
			flag = "right";
			if (checklist.length > 0) {
				takelist(flag);
			}
		});

		//遍历实现穿梭
		function takelist(flag) {
			//任务3:步骤1——遍历list数组
			for (var i = 0; i < list.length; i++) {
				if (list[i].checked) {
					//任务3:步骤2——清除选中状态
					list[i].checked = false;
					//任务3:步骤3——定义变量ele,存储选中input框父元素
					var ele = list[i].parentElement;
					//任务3:步骤4——清除对应列表中的选中的元素				
					ele.remove();									
					if (flag == "left") {
						//任务3:步骤5——将元素插入到左侧选框中最前						
						$("#clickRight").prepend(ele);
					} else if (flag == "right") {
						//任务3:步骤6——将元素插入到右侧选框中最前							
						$("#clickLeft").prepend(ele);
					}
				}
			}
			onCurrent(flag)
		};
		//判断移动按钮是否高亮显示
		function onCurrent(flag) {
			if (flag == "left") {
				//任务4:步骤1——获取左侧input框选中数量赋值给checklist
				var checklist = $("#clickLeft input:checkbox:checked ")
				if (checklist.length > 0) {
					//任务4:步骤2——为左边移动按钮添加样式“current”					
					$(".toleft").addClass("current");
				} else {
					//任务4:步骤3——为左边移动按钮删除样式“current”
					$(".toleft").removeClass("current");
				}
			} else {
				//任务4:步骤4——获取右侧input框选中数量赋值给checklist
				var checklist = $("#clickRight input:checkbox:checked ")
				if (checklist.length > 0) {
					//任务4:步骤5—为右边移动按钮添加样式“current”
					$(".toright").addClass("current");
				} else {
					//任务4:步骤6—为右边移动按钮删除样式“current”
					$(".toright").removeClass("current");
				}
			}

		}

方法二:有点小问题

var flag = "left"; //定义标记判断是选中左边还是右边
//穿梭框左侧选中
//任务1:步骤2——给左侧列表中的单选框,绑定点击事件
$("#clickLeft input").click(function() {
	flag = "left";
	onCurrent(flag)
});
//穿梭框右侧选中
//任务1:步骤3——给右侧列表中的单选框,绑定点击事件
$("#clickRight input").click(function() {
	flag = "right";
	onCurrent(flag)
});

$(".toleft").on("click", function() {
	var checklist = $("#clickLeft input:checkbox:checked ");
	for (var i = 0; i < checklist.length; i++) {
		//checklist是jquery对象
		//checklist是Element节点
		checklist[i].parentElement.remove();
		$("#clickRight").prepend(checklist[i].parentElement); //移动到右边
		checklist[i].checked = false; //清除样式勾勾
	}
});
$(".toright").on("click", function() {
	var checklist = $("#clickRight input:checkbox:checked ");
	for (var i = 0; i < checklist.length; i++) {
		//checklist是jquery对象
		//checklist是Element节点
		checklist[i].parentElement.remove();
		$("#clickLeft").prepend(checklist[i].parentElement); //
		checklist[i].checked = false; //清除样式勾勾
	}
});
//判断移动按钮是否高亮显示
		function onCurrent(flag) {
			if (flag == "left") {
				//任务4:步骤1——获取左侧input框选中数量赋值给checklist
				var checklist = $("#clickLeft input:checkbox:checked ")
				if (checklist.length > 0) {
					//任务4:步骤2——为左边移动按钮添加样式“current”					
					$(".toleft").addClass("current");
				} else {
					//任务4:步骤3——为左边移动按钮删除样式“current”
					$(".toleft").removeClass("current");
				}
			} else {
				//任务4:步骤4——获取右侧input框选中数量赋值给checklist
				var checklist = $("#clickRight input:checkbox:checked ")
				if (checklist.length > 0) {
					//任务4:步骤5—为右边移动按钮添加样式“current”
					$(".toright").addClass("current");
				} else {
					//任务4:步骤6—为右边移动按钮删除样式“current”
					$(".toright").removeClass("current");
				}
			}
}

笔记:

左对右错,“获取 ”应没有 var=

elementplus 列表穿梭_单选框

elementplus 列表穿梭_赋值_02

list[i] 不是 checklist[i],                 父元素--parentElement

elementplus 列表穿梭_jquery_03

这里有源码

补充:理论上checklist[i]也应该可以,试了一下成功了。之前没跑起来原因应该是只改了一部分为checklist,然后找不着list。

elementplus 列表穿梭_赋值_04