【问题标题】:jquery datatables row count across pages跨页面的jQuery数据表行数
【发布时间】: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)。

【问题讨论】:

    标签: jquery datatables


    【解决方案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”的值作为数据表中的记录数。

      【讨论】:

        猜你喜欢
        • 2021-10-13
        • 2014-10-28
        • 1970-01-01
        • 2013-06-17
        • 2021-03-25
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多