跨页面的jQuery数据表行数

Posted

技术标签:

【中文标题】跨页面的jQuery数据表行数【英文标题】:jquery datatables row count across pages 【发布时间】:2011-03-15 08:40:48 【问题描述】:

我正在为我的 html 表使用 jQuery DataTables 插件。

有没有办法获取表格中跨页的行数。

例如,如果我的表中有70 行,假设其中50 显示在第一页,20 在第二页。有没有办法得到70的计数?

我已经尝试了这篇文章中包含的所有建议: jQuery: count number of rows in a table

这包括:

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

但上述所有建议似乎都返回了现有页面上的行数(在这种情况下,50 而不是70)。

【问题讨论】:

【参考方案1】:

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

$(document).ready(function() 

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

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

【讨论】:

谢谢,这似乎有效。抱歉,但也想了解有关数据表的其他信息。我正在从数据表中提取一些数据,并将它们传递给 AJAX 调用。如何确保传递所有行的数据,而不仅仅是第一页上的数据?谢谢,Pritish。 @Pritish 查看 fnGetData 函数的文档 (datatables.net/api)。没有参数(如在我的示例中),它实际上返回一个二维数组,其中包含表中的所有数据。 是的,看了一下。警报(oTable.fnGetData());打印出 HTML 整个表格数据。我将如何从中访问单个 HTML 元素(特别是按名称)? ...是的,我也可以确认它似乎在服务器端不起作用。我相信下面的答案适用于服务器端。【参考方案2】:

解决方案

适用于 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);
    
);

演示

有关代码和演示,请参阅 this jsFiddle。

注意事项

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

【讨论】:

这应该是解决方案,因为我可以确认它适用于服务器端和客户端。其他解决方案仅适用于客户端。【参考方案3】:

使用服务器端分页时,您可以像这样访问总记录数...

dt.fnSettings()._iRecordsTotal;

如果您使用服务器端分页,则可以挂接到 fnDrawCallback 并在绘制表格时更新您的 html...

$('#Table').dataTable(
    "fnDrawCallback": function (oSettings) 
        alert(oSettings._iRecordsTotal);
     
);

【讨论】:

【参考方案4】:

如果您使用 Scroller 扩展,并使用搜索将行过滤到子集,您可以像这样获取该子集的长度

$('#foo').dataTable().fnSettings().aiDisplay.length;

【讨论】:

如果应用搜索,这将显示过滤记录的数量,而不是记录总数。此外,不建议再直接访问设置,请参阅this note,应尽可能使用适当的 API 方法。 我知道它会显示,如果我不清楚,对不起。但是点,你不应该像这样访问它,而是现在使用API​​。我应该删除我的答案还是应该保留它,如果它可以以某种方式帮助另一个人不要这样做? 它有效,所以你最好离开它。您只需要阐明它适用于 (1.9 - 1.10) 的 DataTables 版本和限制(应用过滤的记录数,如果有的话)。【参考方案5】:

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

【讨论】:

以上是关于跨页面的jQuery数据表行数的主要内容,如果未能解决你的问题,请参考以下文章

数据表中的错误:无法显示正确的行数

使用jquery的ajax的jsonp类型跨域请求数据、始终获取不到返回数据呢

更改显示的 jquery 数据表默认行数

如何使用 jQuery 检查行数

jQuery使用JSONP实现跨域请求

jquery 如何实现跨域载入其他网站的页面内容