【问题标题】:Can I retrieve column/search specific data from a jQuery DataTable?我可以从 jQuery DataTable 中检索列/搜索特定数据吗?
【发布时间】:2015-09-29 18:14:49
【问题描述】:

我目前正在开发一个在 jQuery DataTable 中显示成员数据的 Web 应用程序页面。我正在为 DataTable 构建一个自定义插件,该插件允许对每个表列进行广泛的过滤。

我当前的任务是能够从 DataTable 中检索过滤后的数据,尽管不会更新表上的数据。我已经知道可以通过以下方式检索所有过滤后的数据:

var data = $table.dataTable().$('tr', { filter: 'applied' });

这会获取搜索框中的任何文本以及应用于列的任何过滤器的数据。我也知道这个调用获取了单元格的 jQuery 选择器。这就是我需要的。但我需要更多...

我的问题是:

  1. 我是否可以通过仅应用搜索框中的内容而不将任何其他当前过滤器应用于列来获取数据?我试过了:

    var data = $table.dataTable().$('tr', { search: 'applied' });

但返回的结果与 { filter : 'applied' } 相同。

  1. 我能否针对特定的列来获取数据,例如:

    var data = $table.dataTable().$('tr', { filter: 'applied', columns: [1, 2, 5] });

  2. 我可以定位特定列以及搜索框中的内容吗?

我的插件需要能够通过应用列/搜索过滤器的各种组合来跟踪数据。

【问题讨论】:

    标签: datatables


    【解决方案1】:

    适用于 DataTables 1.9

    有一个fnFilter() API 方法,但它对表格应用过滤,这不是您想要的。

    或者,您可能希望使用fnGetData() 获取整个表的数据并自行过滤。

    适用于 DataTables 1.10

    有一个 search() API 方法,但它在与 draw() 一起使用时对表应用过滤,这不是您想要的。

    还有filter() API 方法。它不完全是您要查找的内容,但非常接近,但是您需要自己执行搜索。

    您可以按如下方式检索搜索框的内容:

    var searchVal = $('.dataTables_filter input', $table).val();
    

    然后您需要自己进行搜索,下面显示的是一种简单的方法,可能与 DataTables 内部执行搜索的方式不匹配。

    要仅搜索第一列和第二列,请指定 [0,1]columns() 方法。如果未指定参数,则将搜索所有列。

    var filteredData = $table.DataTable()
       .columns([0, 1])
       .data()
       .eq( 0 )
       .filter( function ( value, index ) {
           returrn (value.search(new RegExp(searchVal, "i")) !== -1)
              ? true : false;
       } );
    

    根据手册,变量 filteredData 将包含一个新的 API 实例,其值来自通过回调测试的结果集中。

    要检索所有或选定列的数据,请使用columns().data()

    【讨论】:

    • +1 以获得很好的答案!我可以看到我必须如何执行自己的搜索算法才能达到我想要的结果。我曾考虑过这种方法,但希望 { filter: 'applied' } 调用具有列和/或单个搜索值的参数。似乎情况并非如此。我想让我的插件适用于 1.9 和 1.10+ 版本,所以我将无法使用新的 api 语法。
    • @Sebbo,当您在问题中使用filter: 'applied' 获取搜索框中任何文本的数据并将任何过滤器应用于列时,您所说的 任何过滤器除了搜索框?也许解决方案比我想象的更简单。 $table.DataTable().rows( {search:'applied'} ).nodes().to$() 会为你工作吗?
    • 我对该语句的意思是,如果仅对列应用过滤器,例如$table.fnFilter('some filter text', columnIndex);,那么该过滤器将包含在filter: 'applied' 调用中。现在我有一个解决方案(适用于 1.9 版),将您的想法与其他一些逻辑相结合。将您的答案标记为最佳答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多