4

我正在为 JQuery 使用 Datatables.net 插件。我正在尝试在页脚中创建一个“总计”行。我使用这个例子作为参考:http ://datatables.net/release-datatables/examples/advanced_init/footer_callback.html

此示例中的数组是否aiDisplay提供了当前显示的所有 Rows 索引?还是所有满足当前过滤器的过滤器?

为了澄清这里的区别是满足过滤器但不在当前页面上的行。可能有 30 行满足筛选条件,但由于分页设置为 10,因此仅显示其中 10 行。

如果aiDisplay包含满足过滤器的所有行而不考虑分页,那就太好了!但是,如果它确实只包含当前页面上显示的行,有没有办法我可以获得满足过滤器的所有行的数组?

谢谢!

顺便说一句:这个数组似乎应该包含满足过滤器的所有索引,而不仅仅是页面上的索引。由于提供了iStartiEnd值,因此可以派生页面上的行,并且仅提供页面上的值的数组不会提供额外的值,而不是提供满足过滤器的所有值。但是我找不到这方面的文档。

4

1 回答 1

6

我对该功能进行了检查,所以让我给你一个解释。 nRow其实并不重要。忽略它。包含表中的aaData所有数据,包括过滤器排除的数据。 iStartiEnd想你知道。它们是要显示的行的索引。实际上包含所有(过滤的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)';
    }
});
于 2013-03-27T14:39:19.383 回答