我可以从 jQuery 数据表中检索 column/search 特定数据吗?

Can I retrieve column/search specific data from a jQuery DataTable?

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

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

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

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

我的问题是:

  1. 我能否只应用搜索框中的内容而不对列应用任何其他当前过滤器来获取数据?我试过了:

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

但是 returns 与 { filter : 'applied' } 相同。

  1. 我可以针对特定列获取数据吗,例如:

    var data = $table.dataTable().$('tr', { 过滤器: 'applied', 列: [1, 2, 5] });

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

我的插件需要能够跟踪应用了 column/search 过滤器的各种组合的数据。

对于 DataTables 1.9

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

或者您可能想使用 fnGetData() 获取整个 table 的数据并自行过滤。

对于 DataTables 1.10

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

还有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()