如何使用jQuery UI将Sortable行附加到另一个选项卡中的表?

w8rqjzmb  于 2024-01-07  发布在  jQuery
关注(0)|答案(1)|浏览(170)

我有一个带有jquery-ui标签的页面,每个标签包含一个表,我把标签设置为可删除的,表设置为可排序的。
我希望能够从活动选项卡内的表中拖动一行,放在不同的选项卡上,并将该行附加到该选项卡中包含的表中。
以下是我的JS:

  1. $("#tabs").tabs();
  2. $("tbody").sortable({
  3. items: "> tr:not(:first)",
  4. appendTo: "parent",
  5. helper: "clone"
  6. }).disableSelection();
  7. $("#tabs ul li a").droppable({
  8. hoverClass: "drophover",
  9. tolerance: "pointer",
  10. drop: function(e, ui) {
  11. var tabdiv = $(this).attr("href");
  12. $(tabdiv + " table tr:last").after(ui.draggable);
  13. ui.draggable.remove();
  14. }
  15. });

字符串
正如您在这个JSFiddle中看到的,行是可拖动的,但是将它们拖到另一个选项卡上并不会将其追加到其中的表中。
问题似乎是我试图使用ui.draggable jquery元素在tab表的最后一行之后追加:

  1. $(tabdiv + " table tr:last").after(ui.draggable);


相反,如果我自己用<tr>标记构建行,并使用ui.draggable的html,如下所示:

  1. $(tabdiv + " table tr:last").after("<tr>" + ui.draggable.html() + "</tr>");


那么它就像预期的那样工作,如这个分叉的JSFiddle所示。
这样做的问题是,我丢失了附加到原始行的任何类或数据信息。
有没有人能告诉我如何追加被拖动的行元素?(顺便说一句,我是jquery的新手,所以如果这是一些基本的东西,我很抱歉。)

pgky5nke

pgky5nke1#

可以使用clone()方法追加当前元素的克隆,包括数据和事件处理程序,如下所示:

  1. $("#tabs").tabs();
  2. $("tbody").sortable({
  3. items: "> tr:not(:first)",
  4. appendTo: "parent",
  5. helper: "clone"
  6. }).disableSelection();
  7. $("#tabs ul li a").droppable({
  8. hoverClass: "drophover",
  9. tolerance: "pointer",
  10. drop: function (e, ui) {
  11. var tabdiv = $(this).attr("href");
  12. $(tabdiv + " table").append(ui.draggable.clone(true).show());
  13. ui.draggable.remove();
  14. }
  15. });
  1. table {
  2. border-collapse:collapse;
  3. }
  4. table tr td {
  5. border: 1px solid red;
  6. padding:2px 15px 2px 15px;
  7. width:50px;
  8. }
  9. #tabs ul li.drophover {
  10. color:green;
  11. }
  1. <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
  2. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  3. <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
  4. <div id="tabs">
  5. <ul>
  6. <li><a href="#current"><span>Current</span></a>
  7. </li>
  8. <li><a href="#archive"><span>Archive</span></a>
  9. </li>
  10. <li><a href="#future"><span>Future</span></a>
  11. </li>
  12. </ul>
  13. <div id="current">
  14. <div id="table1">
  15. <table>
  16. <tbody>
  17. <tr>
  18. <td>COL0</td>
  19. <td>COL1</td>
  20. <td>COL2</td>
  21. </tr>
  22. <tr>
  23. <td>c00</td>
  24. <td>c01</td>
  25. <td>c02</td>
  26. </tr>
  27. <tr>
  28. <td>c10</td>
  29. <td>c11</td>
  30. <td>c12</td>
  31. </tr>
  32. <tr>
  33. <td>c20</td>
  34. <td>c21</td>
  35. <td>c22</td>
  36. </tr>
  37. </tbody>
  38. </table>
  39. </div>
  40. </div>
  41. <div id="archive">
  42. <div id="table2">
  43. <table>
  44. <tbody>
  45. <tr>
  46. <td>COL0</td>
  47. <td>COL1</td>
  48. <td>COL2</td>
  49. </tr>
  50. <tr>
  51. <td>a00</td>
  52. <td>a01</td>
  53. <td>a02</td>
  54. </tr>
  55. <tr>
  56. <td>a10</td>
  57. <td>a11</td>
  58. <td>a12</td>
  59. </tr>
  60. <tr>
  61. <td>a20</td>
  62. <td>a21</td>
  63. <td>a22</td>
  64. </tr>
  65. </tbody>
  66. </table>
  67. </div>
  68. </div>
  69. <div id="future">
  70. <div id="table3">
  71. <table>
  72. <tbody>
  73. <tr>
  74. <td>COL0</td>
  75. <td>COL1</td>
  76. <td>COL2</td>
  77. </tr>
  78. <tr>
  79. <td>f00</td>
  80. <td>f01</td>
  81. <td>f02</td>
  82. </tr>
  83. <tr>
  84. <td>f10</td>
  85. <td>f11</td>
  86. <td>f12</td>
  87. </tr>
  88. <tr>
  89. <td>f20</td>
  90. <td>f21</td>
  91. <td>f22</td>
  92. </tr>
  93. </tbody>
  94. </table>
  95. </div>
  96. </div>
  97. </div>
展开查看全部

相关问题