1+x课程作业 -穿梭框

简介: 1+x课程作业 -穿梭框

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。

相关文章
|
16天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
8天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
11天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
1029 34
|
10天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
783 55
|
8天前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
670 11