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=
list[i] 不是 checklist[i], 父元素--parentElement
这里有源码
补充:理论上checklist[i]也应该可以,试了一下成功了。之前没跑起来原因应该是只改了一部分为checklist,然后找不着list。