我正在使用带有FixedColumn扩展名的DataTables插件。我一直试图在保留表的滚动位置的同时重新加载数据(来自Ajax源)。如果我在桌子的上半部分,它可以工作,但是在某个点之后它会跳回到刚过了一半的滚动。
我采用的一种方法是使用JQuery Deferred模式,如下所示:
function redrawTableInPlace() {
var docTable = $('#documentsList').dataTable();
var scrollPos=$(".dataTables_scrollBody").scrollTop();
console.log("Current scroll position: " + scrollPos);
console.log("About to redraw");
$.when(docTable.fnStandingRedraw()).then($(".dataTables_scrollBody").scrollTop(scrollPos));
}
这似乎没有任何效果,好像当时的结构甚至不存在。
我尝试修改DataTables以接受draw函数的回调,但回调不会被调用。我让它工作的唯一方法是在div上手动设置scrollTop,其setTimeout延迟足以使表绘制完成,这当然是不可取的。该代码如下所示:
function redrawTableInPlace() {
var docTable = $('#documentsList').dataTable();
var scrollPos=$(".dataTables_scrollBody").scrollTop();
console.log("Current scroll position: " + scrollPos);
console.log("About to redraw");
docTable.fnStandingRedraw();
setTimeout(function() {
$(".dataTables_scrollBody").scrollTop(scrollPos);
console.log("Set scroll to: " + $(".dataTables_scrollBody").scrollTop());
}, 40000);
}
我在网上发现的每一条建议都失败了,这让我觉得它与某些我们正在使用的特定DataTables插件/功能有关。有什么想法吗?