jquery DataTables。如何获取过滤(可见)行

时间:2011-06-25 14:34:41

标签: jquery datatables

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

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

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

7 个答案:

答案 0 :(得分:25)

对于使用DataTables 1.10+的任何人来说,如果你想要过滤(更好的术语:"搜索")行,我已经搜索了大约一个小时:

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

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

答案 1 :(得分:18)

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

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

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

答案 2 :(得分:6)

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

'_'返回'TR'(html元素)的集合。

答案 3 :(得分:1)

在当前版本中,selector-modifier使用一组稍微不同的属性。

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

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

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

一些有用的链接:

答案 4 :(得分:0)

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

/**
 * 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);
    })
}

希望它有所帮助。

答案 5 :(得分:0)

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

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'}是当前可见行的正确选择器,但是实际上,这可能会在分页之后为您提供可见行。

答案 6 :(得分:-1)

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

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