【发布时间】:2011-11-29 20:22:24
【问题描述】:
我正在使用 jQuery Datatables。 每当用户调整窗口大小时,我都想更改表格的高度。我能够捕捉到允许我计算新高度的窗口调整大小事件。如何将新高度分配给数据表对象?
【问题讨论】:
标签: javascript jquery datatables
我正在使用 jQuery Datatables。 每当用户调整窗口大小时,我都想更改表格的高度。我能够捕捉到允许我计算新高度的窗口调整大小事件。如何将新高度分配给数据表对象?
【问题讨论】:
标签: javascript jquery datatables
您可以使用以下代码:
var calcDataTableHeight = function() {
return $(window).height() * 55 / 100;
};
var oTable = $('#reqAllRequestsTable').dataTable({
"sScrollY": calcDataTableHeight();
});
$(window).resize(function() {
var oSettings = oTable.fnSettings();
oSettings.oScroll.sY = calcDataTableHeight();
oTable.fnDraw();
});
【讨论】:
当前的答案对我不起作用(使用 v 1.9.1)。我认为这个解决方案不仅有效,而且性能更好(and is based on the author's suggestion)。此示例使用smartresize 解决跨浏览器窗口大小调整问题。
var defaultOptions = {...};//your options
var calcDataTableHeight = function() {
//TODO: could get crazy here and compute (parent)-(thead+tfoot)
var h = Math.floor($(window).height()*55/100);
return h + 'px';
};
defaultOptions.sScrollY = calcDataTableHeight();
var oTable = this.dataTable(defaultOptions);
$(window).smartresize(function(){
$('div.dataTables_scrollBody').css('height',calcDataTableHeight());
oTable.fnAdjustColumnSizing();
});
【讨论】:
使用较新版本的 Datatables,还有其他方法,当与明智地使用计时器来观察调整大小事件触发器相结合时,效果非常好。我已经为那些被困在运行旧版本 DataTables 的人留下了“古老的”“window.location.reload()”行——只需取消注释它并注释掉“table.draw()”调用。
旁注,文档说正确的调用是“table.Draw()”——我正在使用的版本不是这种情况(调用都是小写的)。
$(window).on('resize', function(e)
{
if (typeof resizeTimer !== 'undefined') {
clearTimeout(resizeTimer);
}
resizeTimer = setTimeout(function()
{
// Get table context (change "TABLENAME" as required)
var table = $('#TABLENAME').DataTable();
// Set new size to height -100px
$('.dataTables_scrollBody').css('height', window.innerHeight-100+"px");
// Force table redraw
table.draw();
// Only necessary for ancient versions of DataTables - use INSTEAD of table.draw()
// window.location.reload();
}, 250); // Timer value for checking resize event start/stop
});
就是这样。
【讨论】:
table.draw(),需要调用table.scroller.measure(true)。
if (typeof resizeTimer !== 'undefined') { 包装clearTimeout(resizeTimer) 语句以避免JS 错误。
对于 DataTables 1.10:
$("#table").DataTable( {
scrollY: '250px',
scrollCollapse: true,
paging: false,
});
$('#table').closest('.dataTables_scrollBody').css('max-height', '500px');
$('#table').DataTable().draw();
当您更改 CSS 时,您必须调用 draw()。
【讨论】:
简单地说:
$('#example').dataTable({
"sScrollY": "auto"
});
【讨论】:
这对我有用
$(document).ready(function () {
$('#dataTable1').dataTable({
"scrollY": 150,
"scrollX": 150
});
$('.dataTables_scrollBody').height('650px');
});
【讨论】:
这是一个简单的解决方案,如documented here
$(document).ready(function() {
$('#example').DataTable( {
scrollY: '50vh',
scrollCollapse: true,
paging: false
});
});
vh 相对于视口高度的 1%*
您可以使用vh unit 设置根据窗口大小而变化的高度。
支持:Chrome 20.0+、IE 9.0+、FireFox 19.0+、Safari 6.0+、Opera 20.0+
【讨论】:
我觉得你可以通过css改变表格的高度
$(window).resize(function(){
$('#yourtable').css('height', '100px');
});
【讨论】: