我正在使用 JQuery 的 Datatables.net 插件。我正在尝试在页脚中创建一个“总计”行。我使用此示例作为参考:http://datatables.net/release-datatables/examples/advanced_init/footer_callback.html
本例中的数组
aiDisplay
是否给出了当前显示的所有Rows索引?或者所有满足当前过滤条件的?
为了澄清这里的区别,是满足过滤器但不在当前页面上的行。可能有 30 行满足过滤器,但仅显示其中 10 行,因为分页设置为 10。
如果
aiDisplay
包含满足过滤器的所有行,无论分页如何,那就太好了!但是,如果它确实只包含当前页面上显示的行,有没有办法获得满足过滤器的所有行的数组?
谢谢!
顺便说一句:这个数组似乎应该包含满足过滤器的所有索引,而不仅仅是页面上的索引。由于提供了
iStart
和 iEnd
值,因此可以导出页面上的行,并且提供仅包含页面上的值的数组不会比提供满足过滤器的所有值提供额外的价值。但是我找不到这方面的文档。
我检查了该功能,所以让我给你一个解释。
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)';
}
});
<script>
$(文档).ready(function() { $('#myTable').dataTable({ “bPaginate”:正确, “bLengthChange”:假, “页面长度”:100, 顺序:[[0,'升序']] }); $('#searchInput').on('keyup', function() { $('#myTable').dataTable.search(this.value).draw(); }); });