[关闭]
@GivenCui 2016-06-01T09:58:53.000000Z 字数 3742 阅读 673

QQ添加删除人功能实现分析

js高级



目录



JS课程合集跳转链接


题目所需要的技能

  1. 新建json假数据
  2. 用Ajax访问
  3. 用数组的相关操作
  4. open()打开子页面,父子页面的传值
  5. 封装练习
  6. this的用法
  7. DOM的元素的动态创建和删除
  8. select标签和Select对象的属性
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>选人</title>
  6. <style type="text/css">
  7. div {
  8. float: left;
  9. border: 1px solid red;
  10. }
  11. #main_div {
  12. width: 500px;
  13. height: 300px;
  14. margin-left: 300px;
  15. }
  16. #left_div {
  17. width: 200px;
  18. height: 300px;
  19. }
  20. #center_div {
  21. width: 94px;
  22. height: 300px;
  23. text-align: center;
  24. }
  25. #right_div {
  26. width: 200px;
  27. height: 300px;
  28. float: right;
  29. }
  30. #left_sel {
  31. width: 200px;
  32. height: 280px;
  33. }
  34. #right_sel {
  35. width: 200px;
  36. height: 280px;
  37. }
  38. input {
  39. margin-top: 30px;
  40. }
  41. </style>
  42. <!-- 导入事件工具js文件 -->
  43. <script type="text/javascript" src="EventUtil.js"></script>
  44. </head>
  45. <body>
  46. <div id="main_div">
  47. <!-- 左边的div -->
  48. <div id="left_div">
  49. <label id="left_label">0</label>
  50. <select id="left_sel" multiple>
  51. </select>
  52. </div>
  53. <!-- 中间的div -->
  54. <div id="center_div">
  55. <input type="button" value="添加" id="add_btn" />
  56. <br />
  57. <input type="button" value="移除" id="remove_btn" />
  58. <br />
  59. <input type="button" value="全部添加" id="addAll_btn" />
  60. <br />
  61. <input type="button" value="全部移除" id="removeAll_btn" />
  62. </div>
  63. <!-- 右边的div -->
  64. <div id="right_div">
  65. <label id="right_label">0</label>
  66. <select id="right_sel" multiple>
  67. </select>
  68. </div>
  69. </div>
  70. <!-- ***************************************************************************** -->
  71. <script type="text/javascript">
  72. //左边sel
  73. var leftSel = $("left_sel");
  74. //左边数据数组
  75. var leftPersonArray = new Array();
  76. //右边sel
  77. var rightSel = $("right_sel");
  78. //右边数据数组
  79. var rightPersonArray = new Array();
  80. //window的onload事件
  81. EventUtil.addHandler(window, "load", function () {
  82. //1、初始化数据
  83. var personObj = [
  84. {
  85. name : "张三"
  86. },
  87. {
  88. name : "李四"
  89. },
  90. {
  91. name : "王五"
  92. },
  93. {
  94. name : "赵六"
  95. },
  96. {
  97. name : "冯七"
  98. }
  99. ];
  100. //遍历personObj
  101. for (var tempIdx in personObj) {
  102. //得到每个person对象
  103. var tempPerson = personObj[tempIdx];
  104. //添加到左边数据数组
  105. leftPersonArray.push(tempPerson);
  106. //重置左边sel
  107. resetSel(leftSel, tempPerson.name);
  108. //人数
  109. leftAndRightCount();
  110. }
  111. //2、给左边sel添加事件
  112. EventUtil.addHandler(leftSel, "dblclick", function () {
  113. //添加右边数据数组
  114. // this.selectedIndex 相当于leftSel.selectedIndex,获得选中option的下标
  115. rightPersonArray.push(leftPersonArray[this.selectedIndex]);
  116. //重置右边sel
  117. resetSel(rightSel, leftPersonArray[this.selectedIndex].name);
  118. //删除左边数据数组
  119. leftPersonArray.splice(this.selectedIndex, 1);
  120. //删除左边option
  121. //this.options 获得所有option 是一个数组
  122. leftSel.removeChild(this.options[this.selectedIndex]);
  123. //人数
  124. leftAndRightCount();
  125. });
  126. //3、给添加按钮添加事件
  127. EventUtil.addHandler($("add_btn"), "click", function () {
  128. //遍历options
  129. for (var i = 0; i < leftSel.options.length; i++) {
  130. //找出选中的option
  131. if (leftSel.options[i].selected) {
  132. //添加右边数据数组
  133. rightPersonArray.push(leftPersonArray[i]);
  134. //重置右边sel的方法
  135. resetSel(rightSel, leftPersonArray[i].name);
  136. //删除左边数据数组
  137. leftPersonArray.splice(i, 1);
  138. //删除左边的option
  139. leftSel.removeChild(leftSel.options[i]);
  140. //每次删除后要改变下标
  141. // i -= 1;
  142. i--;
  143. }
  144. }
  145. //人数
  146. leftAndRightCount();
  147. });
  148. //4、右边sel添加事件
  149. //5、给移除按钮添加事件
  150. //6、给全部添加按钮添加事件
  151. EventUtil.addHandler($("addAll_btn"), "click", function () {
  152. //遍历左边的options
  153. for (var i = 0; i < leftSel.options.length; i++) {
  154. //添加右边数据数组
  155. rightPersonArray.push(leftPersonArray[i]);
  156. //重置右边sel
  157. resetSel(rightSel, leftPersonArray[i].name);
  158. //删除左边数据数组
  159. leftPersonArray.splice(i, 1);
  160. //删除左边option
  161. leftSel.removeChild(leftSel.options[i]);
  162. //改变下标
  163. i--;
  164. }
  165. //人数
  166. leftAndRightCount();
  167. });
  168. //7、给全部移除按钮添加事件
  169. });
  170. /******************封装的方法*****************************************************/
  171. //封装左边和右边人数的方法
  172. function leftAndRightCount () {
  173. $("left_label").innerHTML = leftPersonArray.length;
  174. $("right_label").innerHTML = rightPersonArray.length;
  175. }
  176. //封装重置sel的方法
  177. function resetSel (sel, textNodeValue) {
  178. //创建option
  179. var option = createElement("option");
  180. //创建textNode
  181. var optionValue = createTextNode(textNodeValue);
  182. //添加textNode
  183. option.appendChild(optionValue);
  184. //添加option
  185. sel.appendChild(option);
  186. }
  187. //封装创建元素的方法
  188. function createElement (elementName) {
  189. return document.createElement(elementName);
  190. }
  191. //封装创建textNode的方法
  192. function createTextNode (elementValue) {
  193. return document.createTextNode(elementValue);
  194. }
  195. //封装通过id获取标签的方法
  196. function $ (idName) {
  197. return document.getElementById(idName);
  198. }
  199. </script>
  200. </body>
  201. </html>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注