jQuery UI可排序表格和单元格在拖动tr时缩小

时间:2016-08-26 17:24:36

标签: jquery jquery-ui jquery-ui-sortable

虽然拖动我面临两个问题。

  1. 当我有一个隐藏的td时,它自我缩小了。
  2. 拖动的tr cell(td)s正在缩小
  3. 这是可排序的代码:

    $('tbody').sortable({
        items: ">tr",
        appendTo: "parent",
        opacity: 1,
        containment: "document",
        placeholder: "placeholder-style",
        cursor: "move",
        delay: 150,
    });
    

    jsfiddle link

2 个答案:

答案 0 :(得分:3)

缩小表格的问题是因为你有一个隐藏的单元格(在"\n"为你创建的占位符中有5个单元格,而其中没有单元格被隐藏。 您可以通过在开始拖动后将sortable内的第二个td设置为隐藏来解决此问题:

placeholder

第二个问题是由于您拖动的tr已更改为$(this).find('.placeholder-style td:nth-child(2)').addClass('hidden-td') 并且不再具有该表的属性。您可以通过将position: absolute设置为该行来解决此问题:

display: table

完成排序后,必须取消此更改。

以下是完整的更改:

ui.helper.css('display', 'table')

这是一个工作示例



start: function(event, ui) {
    $(this).find('.placeholder-style td:nth-child(2)').addClass('hidden-td')
    ui.helper.css('display', 'table')
},
stop: function(event, ui) {
    ui.item.css('display', '')
}

$('tbody').sortable({
  items: ">tr",
  appendTo: "parent",
  opacity: 1,
  containment: "document",
  placeholder: "placeholder-style",
  cursor: "move",
  delay: 150,
  start: function(event, ui) {
  	$(this).find('.placeholder-style td:nth-child(2)').addClass('hidden-td')
    ui.helper.css('display', 'table')
  },
  stop: function(event, ui) {
  	ui.item.css('display', '')
  }
});

.sort-table{
  width: 100%;
  border: 1px solid #cecece;
  background-color: #d5a45a;
}
thead{
  background-color: #0e79c4;
}
th{
     font-size: 1em;
    line-height: 1.375em;
    font-weight: 400;
    background-color: #0e79c4;
    vertical-align: middle;
    padding: 0.5em 0.9375em;
    text-align: left;
}
tr{
  border: 1px solid #cecece;
}
td{
  padding: 1em;
  vertical-align: middle;
   display: table-cell;
   border-top: 1px solid #cecece;
}
.hidden-td{
  display: none;
}
.placeholder-style{
  background-color: grey;
}




还有一个jsfiddle:http://jsfiddle.net/mjkq4fb6/

答案 1 :(得分:0)

现有答案是正确的,即问题是占位符行没有隐藏任何单元格。但是,与其迷上start和stop方法,不如将适当的样式应用于jQuery已经使用的类将更加容易。

占位符行具有类ui-sortable-placeholder,我们可以使用.ui-sortable-placeholder td{ display: none; }将其所有单元格隐藏起来,该行仍将可见。拖动行的类别为ui-sortable-helper;我们希望其显示为表格。

一个简短的例子:

$('tbody').sortable();
td{
   border-top: 1px solid #cecece;
}
.hidden-td{
  display: none;
}
.ui-sortable-placeholder td{
    display: none;
}
.ui-sortable-helper{
    display: table;
}
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<table class="sort-table">
  <thead>
    <tr>
      <th>Col1 </th>
      <td class="hidden-td">row1 hidden td</td>
      <th>Col2 </th><th>Col3 </th><th>Col4 </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>row1 td1</td>
      <td class="hidden-td">row1 hidden td</td>
      <td>row1 td2</td><td>row1 td3</td><td>row1 td4</td>
    </tr>
    <tr>
      <td>row2 td1</td>
      <td class="hidden-td">row1 hidden td</td>
      <td>row2 td2</td><td>row2 td3</td><td>row2 td4</td>
    </tr>
    <tr>
      <td>row3 td1</td>
      <td class="hidden-td">row1 hidden td</td>
      <td>row3 td2</td><td>row3 td3</td><td>row3 td4</td>
    </tr>
    <tr>
      <td>row4 td1</td>
      <td class="hidden-td">row1 hidden td</td>
      <td>row4 td2</td><td>row4 td3</td><td>row4 td4</td>
    </tr>
  </tbody>
</table>