我可以从jQuery DataTable中检索列/搜索特定数据吗?

时间:2015-07-10 21:02:22

标签: datatables

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

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

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

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

我的问题是:

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

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

  2. 但是返回与{filter:'applied'}。

    相同
    1. 我可以定位特定列以获取数据,例如:

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

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

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

1 个答案:

答案 0 :(得分:3)

适用于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()