jQuery 实现左右Select列表数据互换

素颜马尾好姑娘i 2022-08-14 05:34 260阅读 0赞

前言

很简单的一个效果,交换两个select列表的option项,常用于“交换”相关的需求,效果图如下所示:

20151123173320972

代码

思路很简单,点击按钮无非就是将select1中的选中的option append到select2中,这里我们主要用到的就是jquery的appendTo方法,我们在w3cschool可以看到这个方法的详细介绍,

Center

很简单,下面直接贴上全部代码以供参考:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <%
  4. String path = request.getContextPath();
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <title></title>
  10. <style type="text/css">
  11. * {
  12. margin: 0;
  13. padding: 0;
  14. list-style-type: none;
  15. }
  16. a,img {
  17. border: 0;
  18. }
  19. body {
  20. font: 12px/180% Arial, Helvetica, sans-serif, "新宋体";
  21. }
  22. .selectbox {
  23. width: 500px;
  24. height: 220px;
  25. margin: 40px auto 0 auto;
  26. }
  27. .selectbox div {
  28. float: left;
  29. }
  30. .selectbox .select-bar {
  31. padding: 0 20px;
  32. }
  33. .selectbox .select-bar select {
  34. width: 150px;
  35. height: 200px;
  36. border: 4px #A0A0A4 outset;
  37. padding: 4px;
  38. }
  39. .selectbox .btn {
  40. width: 50px;
  41. height: 30px;
  42. margin-top: 10px;
  43. cursor: pointer;
  44. }
  45. .bottom-btn{
  46. width: 500px;
  47. height: 220px;
  48. margin: 40px auto 0 auto;
  49. margin-left: 40%;
  50. }
  51. </style>
  52. <script type="text/javascript" src="<%=path%>/js/jquery-1.8.0.min.js"></script>
  53. <script type="text/javascript" src="<%=path%>/js/common/common.js"></script>
  54. <script type="text/javascript">
  55. $(function() {
  56. //移到右边
  57. $('#add').click(function() {
  58. //获取选中的选项,删除并追加给对方
  59. $('#select1 option:selected').appendTo('#select2');
  60. });
  61. //移到左边
  62. $('#remove').click(function() {
  63. $('#select2 option:selected').appendTo('#select1');
  64. });
  65. //全部移到右边
  66. $('#add_all').click(function() {
  67. //获取全部的选项,删除并追加给对方
  68. $('#select1 option').appendTo('#select2');
  69. });
  70. //全部移到左边
  71. $('#remove_all').click(function() {
  72. $('#select2 option').appendTo('#select1');
  73. });
  74. //双击选项
  75. $('#select1').dblclick(function() { //绑定双击事件
  76. //获取全部的选项,删除并追加给对方
  77. $("option:selected", this).appendTo('#select2'); //追加给对方
  78. });
  79. //双击选项
  80. $('#select2').dblclick(function() {
  81. $("option:selected", this).appendTo('#select1');
  82. });
  83. });
  84. function reGrouping(){
  85. var group1 = [];
  86. var options = $('#select1 option');
  87. for(var i=0;i<options.length;i++){
  88. group1.push(options.eq(i).val());
  89. }
  90. var str1 =$('#sp1').html()+','+group1.join(',');
  91. var group2 = [];
  92. var options2 = $('#select2 option');
  93. for(var i=0;i<options2.length;i++){
  94. group2.push(options2.eq(i).val());
  95. }
  96. var str2 =$('#sp2').html()+','+group2.join(',');
  97. $.ajax({
  98. method:'post',
  99. url:'../../app/mutualEvaluation/reGrouping',
  100. data:{str1:str1,str2:str2},
  101. dataType:'json',
  102. cache:false,
  103. success:function(data)
  104. {
  105. if("ok"==data.data)
  106. {
  107. alert("调整分组成功!");
  108. return ;
  109. }else
  110. {
  111. alert(data.data);
  112. return ;
  113. }
  114. }
  115. });
  116. location.href = '../../app/mutualEvaluation/toGroupingPage';
  117. }
  118. function toGroupingPage(){
  119. location.href = '../../app/mutualEvaluation/toGroupingPage';
  120. }
  121. </script>
  122. <link href="<%=path%>/css/mytable.css" rel="stylesheet" type="text/css" />
  123. </head>
  124. <body>
  125. <div class="selectbox">
  126. <div class="select-bar">
  127. <span id="sp1">${groupOneName}</span><br/>
  128. <select multiple="multiple" id="select1">
  129. <c:forEach items="${groupOneList}" var="item">
  130. <option value="${item.stunumber}">${item.stuname}</option>
  131. </c:forEach>
  132. </select>
  133. </div>
  134. <div class="btn-bar"><br/>
  135. <span id="add"><input type="button" class="btn" value=">" /></span><br />
  136. <span id="add_all"><input type="button" class="btn" value=">>" /></span><br />
  137. <span id="remove"><input type="button" class="btn" value="<" /></span><br />
  138. <span id="remove_all"><input type="button" class="btn" value="<<" /></span>
  139. </div>
  140. <div class="select-bar">
  141. <span id="sp2">${groupTwoName}</span><br/>
  142. <select multiple="multiple" id="select2">
  143. <c:forEach items="${groupTwoList}" var="item">
  144. <option value="${item.stunumber}">${item.stuname}</option>
  145. </c:forEach>
  146. </select>
  147. </div>
  148. </div>
  149. <div class="bottom-btn">
  150. <input type="button" class="btn" value="返回" onClick="toGroupingPage()"/>
  151. <input type="button" class="btn" value="保存" onClick="reGrouping()"/>
  152. </div>
  153. </body>
  154. </html>

6696行就是互换数据的js代码了,可以看到核心就是通过appendTo去进行option元素的追加,而第100行到133行则是数据整理,毕竟实际应用场景下我们肯定要将数据封装成一定格式传到后台去,我这里的处理方式是:通过join()将数组直接转换成逗号拼接的字符串,然后在这个字符串前再用逗号拼上小组名,这样传到后台之后合理分割即可方便处理,join()方法是javascript中的Array对象的方法,我们在w3cschool中看一下它的详细介绍:

Center 1

逗号做连接符可以缺省参数,可以看到这个方法也非常方便的将js数组转换成了指定连接符的字符串。

总结

同上篇blog类似仅仅记录和分析一下这种js效果的实现方式,非常简单,The End。

发表评论

表情:
评论列表 (有 0 条评论,260人围观)

还没有评论,来说两句吧...

相关阅读