【问题标题】:jQuery UI Sortable table and cell is shrinking while dragging tr拖动 tr 时 jQuery UI 可排序表和单元格正在缩小
【发布时间】:2016-08-26 17:24:35
【问题描述】:

在拖动时我面临两个问题。

  1. 当我有一个隐藏的td 时,它自己的表正在缩小。
  2. 拖动的 tr 单元格(td)正在缩小

这是可排序的代码:

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

jsfiddle link

【问题讨论】:

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


【解决方案1】:

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

$(this).find('.placeholder-style td:nth-child(2)').addClass('hidden-td')

第二个问题是你拖拽的tr改为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;
}
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<table class="sort-table">
  <thead>
    <tr>
      <th class="header-td">Column1 </th>
      <td class="hidden-td">row1 hidden td</td>
      <th class="header-td">Column2 </th>
      <th class="header-td">Column3 </th>
      <th class="header-td">Column4 </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="body-td">row1 td1</td>
      <td class="body-td hidden-td">row1 hidden td</td>
      <td class="body-td">row1 td2</td>
      <td class="body-td">row1 td3</td>
      <td class="body-td">row1 td4</td>
    </tr>
    <tr>
      <td class="body-td">row2 td1</td>
      <td class="body-td hidden-td">row1 hidden td</td>
      <td class="body-td">row2 td2</td>
      <td class="body-td">row2 td3</td>
      <td class="body-td">row2 td4</td>
    </tr>
    <tr>
      <td class="body-td">row3 td1</td>
      <td class="body-td hidden-td">row1 hidden td</td>
      <td class="body-td">row3 td2</td>
      <td class="body-td">row3 td3</td>
      <td class="body-td">row3 td4</td>
    </tr>
    <tr>
      <td class="body-td">row4 td1</td>
      <td class="body-td hidden-td">row1 hidden td</td>
      <td class="body-td">row4 td2</td>
      <td class="body-td">row4 td3</td>
      <td class="body-td">row4 td4</td>
    </tr>
  </tbody>
</table>

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

【讨论】:

  • 你能检查我的最后一个问题吗?也许可以提供帮助,我真的很喜欢这个@Dekel
  • 可以加个链接吗?我不确定你指的是哪个问题。
  • 这里有链接。
  • 如果您添加另一个没有显示的字段,则无法正常工作。如果我们只有一个带有display:none; 的字段,您的代码可以完美运行,您可以试试吗?
【解决方案2】:

现有答案是正确的,问题在于占位符行没有隐藏任何单元格。但与其挂钩 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>

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2011-12-11
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多