如何使用jQuery Sortable移动多个表行

时间:2013-07-05 08:33:36

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

我有一张这样的表:

<table id="sortable">
  <tr id="d1" class="mainrow"><td class="handle">O</td><td>Item 1</td></tr>
  <tr id="d1b"><td>&nbsp;</td><td>blah</td></tr>
  <tr id="d2" class="mainrow"><td class="handle">O</td><td>Item 2</td></tr>
  <tr id="d2b"><td>&nbsp;</td><td>blah</td></tr>
  <tr id="d3" class="mainrow"><td class="handle">O</td><td>Item 3</td></tr>
  <tr id="d3b"><td>&nbsp;</td><td>blah</td></tr>
  <tr id="d4" class="mainrow"><td class="handle">O</td><td>Item 4</td></tr>
  <tr id="d4b"><td>&nbsp;</td><td>blah</td></tr>
</table>

以及以下用于设置可排序属性的javascript:

$( "#sortable tbody" ).sortable({
  stop: hasChanged,
  handle: '.handle',
  cursor: 'move',
  items: ".mainrow"
});

当我移动一个奇数行时,我希望将奇数和偶数行保持在一起(即使行没有句柄,也无法拾取)。

我的hasChanged函数在发生丢弃后移动偶数行,但拖动时视觉效果看起来不对;差距出现在奇数行之下,我希望它出现在偶数行之下,因为它是在hasChanged函数完成之后它将会结束的。

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:1)

没关系,想通了:

$( "#sortable tbody" ).sortable({
  stop: hasChanged,
  over: movePlaceholder,
  handle: '.handle',
  cursor: 'move'
});

我只是在movePlaceholder函数中更改占位符的位置:

function movePlaceholder(e, ui)
{
  if (ui.placeholder.prev().attr("id").length == 2)
    ui.placeholder.insertAfter(ui.placeholder.next());
}

根据要求,hasChanged函数:

function hasChanged(e, ui)
{
    var newPosition = ui.item.index();
    var id = ui.item.attr("id");

    // whatever you need to do goes here
}