当前位置: 首页 > 知识库问答 >
问题:

如何使用可排序jQueryUI特性同时通过拖放两个表中的行进行排序?

太叔景曜
2023-03-14

我有两张紧挨着的桌子。以下是模板的一个简短示例:

<table id="table1">
    <tbody>
        <tr>
            <td>a1</td>
            <td>a1</td>
        </tr>
        <tr>
            <td>b1</td>
            <td>b1</td>
        </tr>
    </tbody>
</table>
<table id="table2">
    <tbody>
        <tr>
            <td>a2</td>
            <td>a2</td>
        </tr>
        <tr>
            <td>b2</td>
            <td>b2/td>
        </tr>
    </tbody>
</table>

看起来是这样的:

|a1|a1|a2|a2|
|b1|b1|b2|b2|

我的目标是使用可排序的jquery-ui功能,通过同时拖放两个表的行来排序。换句话说-当用户单击例如从tabel1单元格然后整行

|a1|a1|a2|a2|

当鼠标向上时,应先拖动,然后再放下。我不需要在两个表之间拖放行—我需要在拖动时将两个表中的行视为一行—如果这些行在其表中具有相同的位置Y。

实际上,用例是我有网格,我需要在其中实现拖放行。用户可以冻结网格中的一些列-然后有两个表-一个用于冻结的列,一个用于未冻结的列-所以实际上有一行,但分为两个表。以下是网格的一个示例:https://www.igniteui.com/grid/column-fixing

共有1个答案

詹唯
2023-03-14

没有一个好的方法来实现这一点。如果你有更多的项目,这也变得更加困难。基本上,您对一个表执行排序,然后当排序完成时,将相应的项移动到第二个表中的适当位置。

$(function() {
  $("#table1 tbody").sortable({
    handle: ".row-handle",
    items: "> tr",
    helper: function(e, item) {
      var index = item.index();
      item.data("right", $("#table2 tbody tr:eq(" + index + ")").clone());
      item.data("orig-index", index);
      $("#table2 tbody tr:eq(" + index + ")").fadeOut("fast");
      return item;
    },
    update: function(e, ui) {
      var row2 = ui.item.data("right");
      var index = ui.item.index();
      $("#table2 tbody tr").eq(ui.item.data("orig-index")).remove();
      switch (true) {
        case index == 0:
          console.log("First", index);
          $("#table2 tbody tr:eq(0)").before(row2);
          break;
        case index == $("#table2 tr").length:
          console.log("Last", index);
          $("#table2 tbody").append(row2);
          break;
        case index > 0 && index < $("#table2 tr").length:
          console.log("Mid", index);
          $("#table2 tbody tr").eq(index).before(row2);
      }
    }
  });
});
.left {
  float: left;
  width: 50%;
}

.right {
  float: right;
  width: 50%;
}
html prettyprint-override"><link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<table id="table1" class="left ui-widget">
  <thead class="ui-widget-header">
    <tr>
      <td style="width: 20px;">&nbsp;</td>
      <th>Company</th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody class="ui-widget-content">
    <tr>
      <td style="width: 20px;"><span class="ui-icon ui-icon-grip-dotted-vertical row-handle"></span></td>
      <td>Company 1</td>
      <td>Name 1</td>
    </tr>
    <tr>
      <td><span class="ui-icon ui-icon-grip-dotted-vertical row-handle"></span></td>
      <td>Company 2</td>
      <td>Name 2</td>
    </tr>
    <tr>
      <td><span class="ui-icon ui-icon-grip-dotted-vertical row-handle"></span></td>
      <td>Company 3</td>
      <td>Name 3</td>
    </tr>
  </tbody>
</table>
<table id="table2" class="right ui-widget">
  <thead class="ui-widget-header">
    <tr>
      <th>Title</th>
      <th>Address</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Title 1</td>
      <td>Address 1</td>
    </tr>
    <tr>
      <td>Title 2</td>
      <td>Address 2</td>
    </tr>
    <tr>
      <td>Title 3</td>
      <td>Address 3</td>
    </tr>
  </tbody>
</table>
 类似资料:
  • 我的目标是通过拖放对tableview进行排序。我举了一个例子:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm 对于拖放,我通过Scene Builder添加了fxml 制造了控制器 但是在drag Drop,我无法得到我扔下物体的那排位置。我得到的只是手机信息<代码>文本[Text=“

  • 我几乎没有元素。我可以拖放元素。。。但是,我的要求是我需要在放置后对元素进行排序(释放鼠标后,元素必须移动到目标位置)。请帮帮我。。。这是我使用的代码,

  • 问题内容: 我想具有重新排列表中的行的功能(使用拖放对行进行排序)。 并且行排列的索引在模型中也应更改。 如何 使用Angular Directive 做类似的事情:http : //jsfiddle.net/tzYbU/1162/? 我正在生成表为: 问题答案: 我做的。请参阅下面的代码。 的HTML 指令(JS)

  • 我有一个Arraylist,我想按两个属性对ArrayList进行排序1。按名称(字母顺序)2。按自定义键 更多解释-: '

  • 我是javascript新手,我有一个问题暂时无法解决……我需要对表进行动态排序。(借用)代码为: 它适用于文本/数字值,但问题是表中的一列由复选框组成。这个想法是按照带有选中复选框的行在顶部的方式对表格进行排序(/底部,取决于升序/降序方向)。 我试图检查< code > x . innerhtml . checked = = true ,但是< code>x.innerHTML.checked

  • 问题内容: 我使用python创建原型,并且为此使用了zip函数,但不确定如何在Java中执行此操作。基本上,我有两个列表(一个是名称,一个是数据),希望它们相对于彼此排序。我的程序仅处理列表(在这种情况下为数据),但是我将名称用作对正在处理的数据的引用,并且我想尝试以不同的顺序处理数据。这是结构的一个示例(实际上我的数据没有提供给我存储,但是我会对其进行基本排序或反向排序,没什么花哨的)。 所以