您遇到的问题是您将静态行的第一个单元格设置colspan
为 4。
当您将该列移动到第二个位置时,带有 的单元格将colspan
移动到第二个位置。
现在你最终得到第二列,它用colspan
4 来包含单元格,这会抵消一切。如果您想在列中移动,
我会尽量避免在单元格中。colspans
您可以通过简单地添加空单元格而不是使用colspan
.
替换这个:
<tr class="footerrow"><td colspan="4">unsortable colspan row</td></tr>
有了这个:
<tr class="footerrow"><td></td><td></td><td></td><td></td></tr>
演示 - v1 - 使用单个空单元格而不是 colspan
此外,我可能会添加一些样式来隐藏该行的列边框。
编辑
我用这个玩了更长的时间,并且能够想出另一种选择。请注意,它不像您的那么平滑,并且也可以看到更多hacky
。
我查看了可排序扩展的start
和回调,想知道是否可以在 处添加 4 个单元格并再次替换它们。stop
start
stop
使用时,start
您将在排序期间看到 4 个单元格,我不喜欢我认为您希望在拖放操作期间看到页脚的程度。
我注意到,当stop
执行它时,它会在应用实际排序之前执行,这使得start
我们的目的变得多余。
这意味着stop
我们可以用 4 个单元格替换单个单元格,让它排序,添加一个小的时间延迟window.setTimeout
,然后在一个小的延迟后再次用 1 个单元格替换 4 个单元格。这也意味着页脚在拖放过程中保持不变。
DEMO - v2 - 在排序前后使用 stop 重新绘制页脚
这似乎可行,但正如我所说,它不像你的那样平滑,因为我的重绘并导致一点闪烁。此外,我不确定setTimout
当你有一张巨大的桌子时,100 毫秒的通话时间是否足够。
无论哪种方式,我都玩得很开心。我希望这至少会给你一些想法。
来自 DEMO v2 的代码
HTML
note 我data-title
在tr
存储标题文本中添加了一个属性,以便能够动态添加它们。请参阅下面的页脚 HTML,所有其他 HTML 保持不变。
<tr class="footerrow" data-title="Additional Features"><td></td><td></td><td></td><td></td></tr>
脚本
添加了启动回调。如果您有任何问题,请告诉我。
$(function() {
$specialRows = $("#ex7 tr.footerrow");
$('#ex7').sorttable({
placeholder: 'placeholder',
helperCells: ':not(.footerrow td)',
stop: function(e, ui) {
// This replaces the 1 cell with 4 and executes before the sorting actually occurs.
buildFooterTemplates();
// Adding a small timeout we rever to the single cell with colspan 4
window.setTimeout(function() {
buildFooterRows();
}, 100);
}
}).disableSelection();
var buildFooterTemplate = function(title) {
return '<td></td><td></td><td></td><td></td>';
};
var buildFooterRow = function(title) {
return '<td colspan="4" align=center>' + title + '</td>';
};
var buildFooterTemplates = function() {
$specialRows.each(function() {
var $row = $(this);
var title = $row.attr("data-title");
$row.empty().append(buildFooterTemplate());
});
};
var buildFooterRows = function() {
$specialRows.each(function() {
var $row = $(this);
var title = $row.attr("data-title");
$row.empty().append(buildFooterRow(title));
});
};
buildFooterRows();
});