跨页计算jquery数据表格行数

23

我正在使用jQuery DataTables插件来处理HTML表格。

是否有一种方式可以获取跨页表格中行数的总数。

例如,如果我的表格中有70行,并且第1页显示50行,第2页显示20行。是否有一种方法可以获取70的计数?

我尝试了此帖子中包括的所有建议:jQuery:计算表格中行数

这包括:

var rowCount = $('#myTable tr').length;
var rowCount = $('#myTable tr').size();
var rowCount = $('#myTable >tbody >tr').length;
var rowCount = $("#myTable").attr('rows').length;

但是以上所有建议似乎都返回现有页面上的行数(在本例中为50而不是70)。

5个回答

26

看起来 DataTables 正在从 DOM 中删除不在当前页面上的行,因此您无法使用 jQuery 选择器对它们进行计数。 您将需要使用 DataTables API,具体来说是fnGetData函数:

$(document).ready(function() {

    // Initialize your table
    var oTable = $('#myTable').dataTable();

    // Get the length
    alert(oTable.fnGetData().length);
} );

谢谢,这似乎有效。 抱歉,我还想了解一些关于datatables的其他内容。我正在从datatables中提取一些数据,并在AJAX调用中传递它们。如何确保我传递所有行的数据而不仅仅是第一页的数据?谢谢, Pritish。 - Pritish
@Pritish 请查看文档(http://www.datatables.net/api)中的fnGetData函数。如果没有参数(就像我的示例一样),它实际上会返回一个包含表格中所有数据的二维数组。 - Matt Peterson
是的,我看了一下。 alert(oTable.fnGetData()); 会打印出整个表格数据的 HTML。 不过我该如何从中访问单个 HTML 元素(特别是按名称)呢? - Pritish
1
是的,我也可以确认它似乎在服务器端无法工作。下面的答案应该可以在服务器端工作。 - user9008566

12

解决方案

对于DataTables 1.10

使用page.info()来检索有关表格的信息,如下所示。

属性recordsTotal将保存表格中记录的总数。

var table = $('#example').DataTable({
    "initComplete": function(settings, json){ 
        var info = this.api().page.info();
        console.log('Total records', info.recordsTotal);
        console.log('Displayed records', info.recordsDisplay);
    }
});

演示

请查看此 jsFiddle中的代码和演示。

备注

只要在数据检索后使用page.info(),例如在initComplete回调函数中,此解决方案将适用于客户端和服务器端处理模式。


1
这应该是一个解决方案,我可以确认它在服务器端和客户端都能工作。其他解决方案只在客户端工作。 - user9008566

8
当使用服务器端分页时,您可以像这样访问总记录数...
dt.fnSettings()._iRecordsTotal;

如果您使用了服务器端分页,您可以在fnDrawCallback中进行挂钩,并在绘制表格时更新您的HTML...
$('#Table').dataTable({
    "fnDrawCallback": function (oSettings) {
        alert(oSettings._iRecordsTotal);
     }
});

0
如果您正在使用滚动扩展,并使用搜索来过滤行以获取子集,则可以像这样获取该子集的长度。
$('#foo').dataTable().fnSettings().aiDisplay.length;

1
这将显示一些经过筛选的记录,如果应用了搜索,而不是总记录数。此外,不建议直接访问设置,参见此说明,应尽可能使用适当的API方法。 - Gyrocode.com
我知道那是它将显示的内容,如果我没有表达清楚很抱歉。 但是我们应该采用 API 访问,而不是像这样直接访问。我应该删除我的回答,还是保留它以便其他人可以从中获得一些帮助,避免像这样操作? - radbyx
它能正常工作,所以你最好就让它保持原样。你只需要澄清它适用的DataTables版本(1.9-1.10)和限制(如果有过滤应用,则记录数量)。 - Gyrocode.com

-2
在您的数据表Ajax调用的JSON响应中,我们会得到“iTotalDisplayRecords”作为该响应JSON对象的属性之一。 您可以直接使用“iTotalDisplayRecords”的值作为您的数据表中记录的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接