Jquery数据表 - 即使不在当前页面上也获取所有行

时间:2013-03-27 14:04:44

标签: jquery jquery-datatables

我正在使用JQuery的Datatables.net插件。我正在努力创造一个" Totals"在页脚中排。我将此示例用作参考:http://datatables.net/release-datatables/examples/advanced_init/footer_callback.html

此示例中的数组aiDisplay是否提供当前显示的所有Rows索引?或者所有那些都满足当前的过滤器?

澄清这里的差异将是满足过滤器但不在当前页面上的行。可能有30行符合过滤器,但只显示其中10行,因为分页设置为10。

如果aiDisplay包含所有符合过滤条件的行,无论分页如何都很棒!但是,如果它确实只包含当前页面上显示的行,有没有办法可以获得满足过滤器的所有行的数组?

谢谢!

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

1 个答案:

答案 0 :(得分: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)';
    }
});