Javascript 使用JQuery使用逗号分隔的多个值筛选HTML表
我有一个过滤器代码,如果我只给出一个值,它可以正常工作,但是我的表中有100多个值,我必须同时在表中搜索两个或三个值,所以我计划使用逗号,就像在单个搜索框中一样,我将以逗号分隔的方式在表列中编写我必须搜索的值 所以,目前它正在工作,但当我给逗号时它并没有过滤,因为我是这个脚本和web开发的新手,有人能帮我吗Javascript 使用JQuery使用逗号分隔的多个值筛选HTML表,javascript,html,jquery,Javascript,Html,Jquery,我有一个过滤器代码,如果我只给出一个值,它可以正常工作,但是我的表中有100多个值,我必须同时在表中搜索两个或三个值,所以我计划使用逗号,就像在单个搜索框中一样,我将以逗号分隔的方式在表列中编写我必须搜索的值 所以,目前它正在工作,但当我给逗号时它并没有过滤,因为我是这个脚本和web开发的新手,有人能帮我吗 $('tblfiles')。数据表({ “搜索”:{ “聪明”:没错, “regex”:正确 } }); 身份证件 名称 国家 斯特德 1. 普埃 国家1 Sgyt13 2. AAA
$('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我建议您仔细阅读我的代码并试着理解它。我已经在我给你的答案中做了一个修改,修改了搜索词并相应地过滤了表格。以该示例为例,根据需要进行更改,以创建所需的语法。你几乎可以在我的答案中使用的相同函数中覆盖你想要的一切。