跨页面的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数据表行数的主要内容,如果未能解决你的问题,请参考以下文章