我目前正在开发一个页面,用于在jQuery DataTable中显示成员数据的Web应用程序。我正在为DataTable构建一个自定义插件,允许每个表列进行大范围的过滤。
我当前的任务是能够从DataTable中检索过滤后的数据,尽管不会更新表中的数据。我知道已经可以通过执行以下操作来检索所有过滤的数据:
var data = $table.dataTable().$('tr', { filter: 'applied' });
这将获取搜索框中任何文本的数据以及应用于列的所有过滤器。我也知道这个调用获取了单元格的jQuery选择器。这就是我需要的。但我需要更多......
我的问题是:
我是否可以通过仅应用搜索框中的内容来获取数据,而不将任何其他当前过滤器应用于列?我试过了:
var data = $ table.dataTable()。$('tr',{search:'applied'});
但是返回与{filter:'applied'}。
相同我可以定位特定列以获取数据,例如:
var data = $ table.dataTable()。$('tr',{filter:'applied',columns:[1,2,5]});
我可以定位特定列以及搜索框中的内容吗?
我的插件需要能够使用各种列/搜索过滤器组合来跟踪数据。
答案 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()。