我正在使用JQuery的Datatables.net插件。我正在努力创造一个" Totals"在页脚中排。我将此示例用作参考:http://datatables.net/release-datatables/examples/advanced_init/footer_callback.html
此示例中的数组aiDisplay
是否提供当前显示的所有Rows索引?或者所有那些都满足当前的过滤器?
澄清这里的差异将是满足过滤器但不在当前页面上的行。可能有30行符合过滤器,但只显示其中10行,因为分页设置为10。
如果aiDisplay
包含所有符合过滤条件的行,无论分页如何都很棒!但是,如果它确实只包含当前页面上显示的行,有没有办法可以获得满足过滤器的所有行的数组?
谢谢!
顺便说一下:似乎这个数组应该包含满足过滤器的所有索引,而不仅仅是页面上的索引。由于提供了iStart
和iEnd
值,因此可以导出页面上的行,并且只提供页面上的值的数组不会提供额外的值来提供满足过滤器的所有值。但是我找不到这方面的文件。
答案 0 :(得分:6)
我检查了这个功能,所以让我给你一个解释。 nRow
实际上并不重要。只是忽略它。 aaData
包含表格中的所有数据,包括过滤器排除的数据。 iStart
和iEnd
我想你知道。它们是要显示的行的索引。 aiDisplay
实际上包含所有(已过滤的)数据,但有些数据可能由于分页而无法显示。您也可以使用此功能。它有自己的逻辑,你可以改变,以实现你想要的。
$('#example').dataTable({
"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) {
/*
* Calculate the total market share for all browsers in this table (ie inc. outside
* the pagination)
*/
var iTotalMarket = 0;
for ( var i=0 ; i<aaData.length ; i++ ){
iTotalMarket += aaData[i][4]*1;
}
/* Calculate the market share for browsers on this page */
var iPageMarket = 0;
for ( var i=iStart ; i<iEnd ; i++ ){
iPageMarket += aaData[ aiDisplay[i] ][4]*1;
}
/* Modify the footer row to match what we want */
var nCells = nRow.getElementsByTagName('th');
nCells[1].innerHTML = parseInt(iPageMarket * 100)/100 +
'% ('+ parseInt(iTotalMarket * 100)/100 +'% total)';
}
});