Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JQuery使用逗号分隔的多个值筛选HTML表_Javascript_Html_Jquery - Fatal编程技术网

Javascript 使用JQuery使用逗号分隔的多个值筛选HTML表

Javascript 使用JQuery使用逗号分隔的多个值筛选HTML表,javascript,html,jquery,Javascript,Html,Jquery,我有一个过滤器代码,如果我只给出一个值,它可以正常工作,但是我的表中有100多个值,我必须同时在表中搜索两个或三个值,所以我计划使用逗号,就像在单个搜索框中一样,我将以逗号分隔的方式在表列中编写我必须搜索的值 所以,目前它正在工作,但当我给逗号时它并没有过滤,因为我是这个脚本和web开发的新手,有人能帮我吗 $('tblfiles')。数据表({ “搜索”:{ “聪明”:没错, “regex”:正确 } }); 身份证件 名称 国家 斯特德 1. 普埃 国家1 Sgyt13 2. AAA

我有一个过滤器代码,如果我只给出一个值,它可以正常工作,但是我的表中有100多个值,我必须同时在表中搜索两个或三个值,所以我计划使用逗号,就像在单个搜索框中一样,我将以逗号分隔的方式在表列中编写我必须搜索的值

所以,目前它正在工作,但当我给逗号时它并没有过滤,因为我是这个脚本和web开发的新手,有人能帮我吗

$('tblfiles')。数据表({
“搜索”:{
“聪明”:没错,
“regex”:正确
}
});


身份证件 名称 国家 斯特德 1. 普埃 国家1 Sgyt13 2. AAA 国家2 P5372 3. BBB 国家3 P5972
使用正则表达式搜索 支持将正则表达式作为搜索输入。 如果要禁用而仅启用,则可以使用regex语法查找表中的多个值

这可能适合您,因为您可以像这样查找多个值:
country1 | country2

$('tblfiles')。数据表({
“搜索”:{
“聪明”:错误,
“regex”:对
}
});
精确匹配 如果搜索
country1 | country2
,则该表将查找包含
country1
country2
的所有项目。使用
^
$
指定匹配的位置,无法按预期处理数据表

如果要使
country1 | country2
返回精确匹配,模拟,可以使用
\\b
包装搜索词,在本例中,其工作方式类似于
^
$

//精确匹配
常量正则表达式='\\b('+searchTerm+')\\b';
使用逗号作为分隔符 如果要使用逗号作为分隔符,而不是正则表达式的默认值
|
,则可以使用相同的函数将搜索词中的所有逗号替换为管道。这样,您的用户将使用逗号同时搜索多个术语,而不是

//逗号分隔符
const searchTerm=this.value.toLowerCase().replace(/,/g,“|”);
示例(启用了精确匹配)
  • 搜索:
    country1、country2
  • 结果:将具体返回country1和country2

  • 搜索:
    国家[1-2][0-9]
  • 结果:将返回国家10和国家29之间的所有国家/地区

  • 搜索:
    o.*
  • 结果:将返回包含以o开头的字符串的所有行。如果不添加
    *
    ,搜索将查找o的精确匹配项(由非单词的内容包围),并且不会返回任何内容
主要区别在于搜索正则表达式是严格的还是松散的

const table=$('tblfiles');
/*答案不重要*/
/*这只是为了在表中生成数据*/
const tableBody=table.find('tbody');
for(数组(100).keys()的常数x){
tableBody.append(`
${x}
${chance.name()}
国家${x}
${chance.string({length:4,alpha:true,numeric:true})
`)
}
/*回答继续这里*/
$('#tblfiles')。数据表({
“搜索”:{
“聪明”:错误,
“regex”:对
}
});
//这用于强制搜索值搜索整个单词。
//这确保搜索“country1 | country2”将
//仍然能找到完全匹配的
$('.dataTables_filter input').unbind().bind('keyup',function(){
const searchTerm=this.value.toLowerCase().replace(/,/g,“|”);
常量正则表达式='\\b('+searchTerm+')\\b';
table.DataTable().rows().search(regex,true,false).draw();
});
正文{
字体大小:12px!重要;
填料:2米;
}
.dataTables_长度{
显示:无;
}


身份证件 名称 国家 斯特德
所以,这很好,但是如果我像*.3这样搜索,它应该会正确地检索country3,但它不会获取结果,有没有办法用其他特殊方法替换这个.*chars@GowriLakshmi
*.3
不是正确的语法,因此不应给出结果。正确的是
*3
。它应该给你所有以3结尾的东西。@GowriLakshmi是的,你可以。您可以执行与我相同的操作,将给定搜索词中的
替换为
|
。因此,如果您想让用户只修改星号
*
,而不是
*
,那么方法是:
this.value.toLowerCase().replace(',','|').replace('*','.*)
。要知道这可能会给你带来意想不到的问题。您可以通过更改太多来破坏完全可行的正则表达式。也许最好的办法是创建自己的搜索语言,并在幕后将其转换为正则表达式,但要将这些层完全分开。@GowriLakshmi我建议您仔细阅读我的代码并试着理解它。我已经在我给你的答案中做了一个修改,修改了搜索词并相应地过滤了表格。以该示例为例,根据需要进行更改,以创建所需的语法。你几乎可以在我的答案中使用的相同函数中覆盖你想要的一切。