Javascript 在不使用正则表达式的情况下筛选多个数据表

Javascript 在不使用正则表达式的情况下筛选多个数据表,javascript,jquery,datatables,Javascript,Jquery,Datatables,我使用的是Datatables 1.10.19,不过如果有帮助的话,我很乐意升级 我有一个应用程序,在同一页上有几个表。对于其中的一个表,我想为用户提供进行否定搜索的选项。它们输入一个值并查看所有没有该值的行 据我所知,search()API允许简单的文本或正则表达式条件。我见过这样的例子 var allTables = $('table.dataTable').DataTable(); allTables.column( 0 ).search( 'mySearchTerm', true,

我使用的是Datatables 1.10.19,不过如果有帮助的话,我很乐意升级

我有一个应用程序,在同一页上有几个表。对于其中的一个表,我想为用户提供进行否定搜索的选项。它们输入一个值并查看所有没有该值的行

据我所知,search()API允许简单的文本或正则表达式条件。我见过这样的例子

var allTables = $('table.dataTable').DataTable();
 
allTables.column( 0 ).search( 'mySearchTerm', true, false ).draw();
有些regex方言支持负前瞻,因此中描述的regex允许我指定否定,但在Datatables中使用的regex引擎似乎无法处理此类表达式

我的另一种选择是使用一个过滤器功能,我可以通过以下方式建立该功能:

$.fn.dataTable.ext.search.push()
然而,这似乎是一个影响所有表的全局构造,我真的不希望这样


有什么建议吗?

您可以使用
$.fn.dataTable.ext.search.push()
——但这需要一些额外的工作来处理(正如您所指出的)这是一个影响所有表的全局函数这一事实

以下不是完整的实现,但显示了要点:

方法

我的示例使用2个表,每个HTML表中都有硬编码数据

每个表的初始化如下所示:

$(文档).ready(函数(){
//----具有自定义搜索的第一个表---------//
变量表a=$('#示例a')。数据表({
页长:10
} );
//删除默认的DT搜索事件-否则
//他们将始终在我们的定制活动之前开火:
$(“#示例#过滤器输入”).unbind();
//添加表a的自定义筛选器事件:
$('#示例_a_filter input').keyup(函数(e){
表a.draw();
} );
//----第二个带有DT默认搜索的表----//
变量表_b=$('#示例_b')。数据表({
页长:10
} );
} );
对于我的自定义搜索函数,我利用该函数包含一个
设置
参数的事实,我们可以使用该参数查看正在搜索的表:

$.fn.dataTable.ext.search.push(
功能(设置、搜索数据、索引、行数据、计数器){
var tableID=settings.nTable.id;
var searchTerm=$(“#”+tableID+“_过滤器输入”).val()
//console.log(tableID);
//console.log(searchTerm);
//console.log(searchData);
开关(表ID){
案例“示例a”:
如果(searchTerm==''){
返回true;
}否则{
向我展示=真实;
searchData.forEach(函数(项、索引){
if(show_me&&item.includes(searchTerm)){
show_me=false;
}
});
还给我看;
}
打破
违约:
//对于所有其他表,通过行
//已被默认DT过滤器过滤:
返回true;
}
}
);
下一行是我们识别要筛选的表的位置:

var tableID = settings.nTable.id;
之后,我可以使用
switch
语句分别处理每个表的搜索

在默认情况下(对于
示例b
),我只是传递DT默认搜索已经过滤的内容:

default: return true;
当我在每个表中搜索字母
x
时,上面的过滤器如下所示:

未完成实施

对于自定义搜索逻辑,此逻辑不完整。它假定搜索词是单个字符串。如果我在输入字段中输入“xy”,这将排除字段中包含“xy”的所有记录—这可能不是您想要的


您可能需要标准搜索的精确否定-因此输入项需要在空格上拆分,并且需要在每行数据中分别检查每个子项(
x
y
)。

谢谢;这回答了我的问题,并给出了非常详细的例子,肯定会对其他人有所帮助。