如何解决不使用正则表达式过滤多个数据表
我正在使用Datatables 1.10.19,但如果有帮助的话我会很乐意升级。
我在同一页面上有一个包含多个表的应用程序。对于这些表之一,我想为用户提供进行否定搜索的选项。他们输入一个值,然后查看所有没有该值的行。
据我所知,search()API允许使用简单的文本或正则表达式条件。我看过这样的例子。
var allTables = $('table.dataTable').DataTable();
allTables.column( 0 ).search( 'mySearchTerm',true,false ).draw();
某些正则表达式方言支持否定的前瞻性,因此this answer中所述的正则表达式将允许我指定否定,但似乎Datatables中使用的正则表达式引擎不适用于此类表达式。
我的替代方法是使用可以通过此功能建立的过滤器功能
$.fn.dataTable.ext.search.push()
但是,这似乎是影响所有表的全局构造,我真的不想要。
有什么建议吗?
解决方法
您可以使用$.fn.dataTable.ext.search.push()
-但需要做一些额外的工作来处理这一事实(如您所指出的),这是一个全局函数,会影响所有表。
以下不是完整的实现,但显示了要点:
方法
我的示例使用2个表,每个HTML表中都有硬编码的数据。
每个表的初始化如下:
$(document).ready(function() {
// ---- first table with custom search ---------//
var table_a = $('#example_a').DataTable( {
pageLength: 10
} );
// remove the default DT search events - otherwise
// they will always fire before our custom event:
$( "#example_a_filter input" ).unbind();
// add our custom filter event for table_a:
$('#example_a_filter input').keyup( function( e ) {
table_a.draw();
} );
// ---- second table with DT default search ----//
var table_b = $('#example_b').DataTable( {
pageLength: 10
} );
} );
对于我的自定义搜索功能,我利用了该功能包括一个settings
参数的事实,我们可以使用该参数查看正在搜索哪个表:
$.fn.dataTable.ext.search.push (
function( settings,searchData,index,rowData,counter ) {
var tableID = settings.nTable.id;
var searchTerm = $('#' + tableID + '_filter input').val()
//console.log( tableID );
//console.log( searchTerm );
//console.log( searchData );
switch(tableID) {
case 'example_a':
if (searchTerm === '') {
return true;
} else {
show_me = true;
searchData.forEach(function (item,index) {
if (show_me && item.includes(searchTerm)) {
show_me = false;
}
});
return show_me;
}
break;
default:
// for all other tables,pass through the rows
// already filtered by the default DT filter:
return true;
}
}
);
以下行是我们标识要过滤哪个表的地方:
var tableID = settings.nTable.id;
之后,我可以使用switch
语句分别处理每个表的搜索。
在默认情况下(对于example_b
),我只是通过DT默认搜索已过滤的内容:
default: return true;
当我在每个表中搜索字母x
时,上述过滤器如下所示:
实施不完整
对于自定义搜索逻辑,此逻辑是不完整的。假定搜索词是单个字符串。如果在输入字段中输入“ x y”,则将排除字段包含“ x y”的所有记录-可能不是您想要的。
您可能希望对标准搜索进行精确的否定运算-因此,输入项将需要在空格上分割,并且每个子项(x
和y
)都需要分开检查每行数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。