2013-03-27 105 views
4

我正在使用JQuery的Datatables.net插件。我正在尝试在页脚中创建一个“总计”行。我使用此示例作为参考:http://datatables.net/release-datatables/examples/advanced_init/footer_callback.htmlJquery Datatables - 获取所有行,即使不在当前页面上

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

为了澄清这里的区别,将会满足过滤器的行,但不在当前页面上。可能有30行符合筛选条件,但只有10行显示,因为分页设置为10.

如果aiDisplay包含满足筛选条件的所有行(无论分页是多少),那么很棒!但是,如果它确实只包含当前页面上显示的行,是否有一种方法可以获得满足过滤器的所有行的数组?

谢谢!

另一方面:好像这个数组应该包含实现过滤器的所有索引,而不仅仅是页面上的索引。由于提供了iStartiEnd值,因此可以派生页面上的行,并提供只有页面上的值的数组不提供额外的值,而不提供满足过滤器的所有值。但是我无法找到关于此的文档。

+0

难道你不能用自己的测试代码检查一下吗? – 2013-03-27 14:21:01

回答

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)'; 
    } 
}); 
+0

因此,作为对问题的回答,您说aiDisplay包含完成过滤器的所有aaData行的索引,即使这些行由于分页而当前未显示?如果太棒了! – kralco626 2013-03-27 14:47:06

+0

是的,这是正确的。如果你检查了示例代码,你会发现它只是从iStart到显示的iEnd的一部分数据,我检查了aiDisplay的全部数据,它包含了所有的索引。 – OQJF 2013-03-28 00:34:15