我有一张包含1000多条记录的表格,我正在使用bDeferRender: true
。我有一个按钮,点击后可以选择任何记录。 Here is a jsfiddle showing the issue。这是代码:
the_data = [['1', '1', '1'], ['2', '2', '2'], ['3', '3', '3'], ['4', '4', '4'], ['5', '5', '5'], ['6', '6', '6'], ['7', '7', '7'], ['8', '8', '8'], ['9', '9', '9'], ['A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C', 'C'], ['D', 'D', 'D'], ['E', 'E', 'E'], ['F', 'F', 'F'], ['G', 'G', 'G'], ['H', 'H', 'H'], ['I', 'I', 'I'], ['J', 'J', 'J'], ['K', 'K', 'K'], ['L', 'L', 'L'], ['M', 'M', 'M'], ['N', 'N', 'N'], ['O', 'O', 'O'], ['P', 'P', 'P']];
$(document).ready(function () {
var oTable = $('#the_table').dataTable({
"aaData": the_data,
"bDeferRender": true,
"aoColumns": [
{ "mData": "Year", "sTitle":"Year" },
{ "mData": "Month", "sTitle":"Month"},
{ "mData": "Savings", "sTitle":"Savings" },
]
});
$('#btn1').on('click', function() {
//output: 10
alert($('#the_table').dataTable().fnGetNodes().length);
//how to do this??
forceRender();
//this should now output 25
alert($('#the_table').dataTable().fnGetNodes().length);
});
});
如果我使用bDeferRender: false
,那么$('#the_table').dataTable().fnGetNodes().length
将等于25.我想推迟表格的渲染,但是当点击按钮时,我希望表格实际上是所有记录。
答案 0 :(得分:2)
根据DataTables论坛中的post,没有方法可以直接强制渲染表中的所有行。作为解决方法,您可以设置显示长度以显示所有行(然后将呈现所有行),然后将其设置回来。
var settings = table.fnSettings();
var oldDisplayLength = settings._iDisplayLength;
settings._iDisplayLength = -1;
table.fnDraw();
settings._iDisplayLength = oldDisplayLength;
table.fnDraw();
答案 1 :(得分:0)
我发现最好使用fnGetData()
代替fnGetNodes()
,因为它会返回所有记录。我认为fnGetNodes()
用于特定于html表的操作(例如样式)。