【问题标题】:jquery DataTables. How to get filtered (visible) rowsjquery 数据表。如何获取过滤(可见)行
【发布时间】:2011-09-22 15:11:59
【问题描述】:

我有一个将过滤器应用于 jquery 数据表的按钮

$("#buttonFilter").button().click(function() {
                if (lboxColor.val() != null) {
                    jqTable.fnFilter($("option:selected", lboxColor).text(), 1);
                }
            });

它显示了例如 60 行中的 47 行。 我尝试了 .fnGetData() 和 fnGetNodes() 但它显示了所有行,但没有过滤。 我怎样才能得到 47 行?

【问题讨论】:

  • 问题已结束。我使用插件中的方法用于数据表 fnGetFilteredData() 。 datatables.net/plug-ins/api#how_to
  • 如果问题已关闭,请自行编写答案并在两天后接受。

标签: jquery datatables


【解决方案1】:

我已经搜索了大约一个小时,对于使用 DataTables 1.10+ 的任何人,如果您想获得过滤(更好的术语:“搜索”)行:

var table = $('.table').DataTable({...});

function selectOnlyFiltered(){
   var filteredRows = table.rows({filter: 'applied'});
}

【讨论】:

    【解决方案2】:

    对于数据表 1.9 及更高版本,此解决方案有效:

    myDataTableHandle = $('#example1').dataTable(...);
    ...
    ...
    var myFilteredRows = myDataTableHandle._('tr', {"filter":"applied"});
    

    而且您不必包含单独的 api 插件。 :)

    【讨论】:

    • 对我不起作用 :( 它只返回当前可见页面上的值。例如,我的表格信息行显示“显示 45,048 个条目中的 1 到 10 个(从 45,248 个总条目中过滤)”和 @ 987654323@ 代码只给了我 10 个值。
    • 我看到fnRecordsDisplay() 确实给出了正确的 45,048 值,因此有一种方法可以获取所有过滤的节点/值。有谁知道REAL的答案吗?
    • 仅供参考 - 发现问题 - 当 bDeferRender 开启时,不可见页面上的行没有 TR 节点。见similar issue here
    【解决方案3】:

    如果您想要一个节点(DOM 元素)集合,就像 fngetNodes() 一样,您可以使用“$”而不是像这样的“_”table.$('tr', {"filter":"applied"});

    “_”返回一个“TR”(html 元素)集合。

    【讨论】:

      【解决方案4】:

      对于那些难以从仅一列仅从可见行获取数据的人: 您实际上可以像这样组合“选择器”

      var total = api
            .column(2, { search: 'applied' }) // <-- only 3rd column && only visible after applied search
            .data()
            .reduce(function (a, b) {
              return floatVal(a) + floatVal(b)
            }, 0)
      

      我还注意到有几个来源指出 { page: 'current' } 将是当前可见行的正确选择器,但这个实际上为您提供了可能的分页后可见的行。

      【讨论】:

        【解决方案5】:

        在当前版本中,selector-modifier 使用的属性集略有不同。

        var table = $('#example').DataTable();
        var rows = table.rows({"search" : "applied"});
        

        您可以像这样遍历单元格数据:

        table.rows({"search":"applied" }).every( function () {
            var data = this.data();
        });
        

        一些有用的链接:

        【讨论】:

          【解决方案6】:

          对于那些感兴趣的人,这是一个具体的用例。

          /**
           * Select all the elements of the datatable which match the current user
           * search (or all if no search).
           */
          function dtable_selectAll()
          {
              idTable = 'myDataTable';
              var rows = $('#' + idTable).dataTable()
                      .$('tr', {"filter":"applied"});
              var oTT = TableTools.fnGetInstance(idTable);
              $(rows).each(function (index, el){
                  oTT.fnSelect(el);
              })
          }
          

          希望对你有帮助。

          【讨论】:

            【解决方案7】:

            为了完整起见,正如 Yuri 所提到的,有一些“插件”可以提供过滤后的 TR Nodesdata

            要使用这些插件,您需要将这些链接中的代码粘贴到您的脚本文件中。

            【讨论】:

            • 我好像在API页面找不到插件功能,是不是被删除了?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-12
            • 1970-01-01
            • 2022-01-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-19
            相关资源
            最近更新 更多