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。