更改javascript搜索函数
我在html输入/搜索栏上有一个Javascript工作块。除了一个问题外,这一切都非常有效: 现在,它通过精确匹配进行过滤。因此,它搜索页面上的div,如果任何div及其子表具有匹配项,它将从表中删除所有其他行,只留下匹配的行。但目前它与确切的字符串匹配 这只是一个问题,因为我们的很多商品在数字之间都有连字符。因此,如果有人搜索4378-65,它会过滤他们需要的内容,但如果他们输入437865,它会隐藏所有内容,因为从技术上讲,它找不到匹配项 希望是一个简单的修复,但任何帮助都是非常感谢的 JS:更改javascript搜索函数,javascript,jquery,Javascript,Jquery,我在html输入/搜索栏上有一个Javascript工作块。除了一个问题外,这一切都非常有效: 现在,它通过精确匹配进行过滤。因此,它搜索页面上的div,如果任何div及其子表具有匹配项,它将从表中删除所有其他行,只留下匹配的行。但目前它与确切的字符串匹配 这只是一个问题,因为我们的很多商品在数字之间都有连字符。因此,如果有人搜索4378-65,它会过滤他们需要的内容,但如果他们输入437865,它会隐藏所有内容,因为从技术上讲,它找不到匹配项 希望是一个简单的修复,但任何帮助都是非常感谢的 J
<script type = "text/javascript">
$(document).ready(function(){
$("#srch-term").keyup(function(){
//For entered search values
// Retrieve the input field text and reset the count to zero
var filter = $(this).val(), count = 0;
var search_regex = new RegExp(filter, "i")
// Loop through the main container as well as the table body and row that contains the match
$(".group-container").each(function(){
//check if filter matches the group name or description
var group_name = $(this).children('h3').text()
var group_description = $(this).children('.uk-text-muted').text()
if(group_name.search(search_regex)>=0 || group_description.search(search_regex)>=0){ // filter matches
$(this).show() // show group
$(this).find("tbody tr").show() // and all children
return // skip tr filtering
}
var no_matches = true
$(this).find("tbody tr").each(function(){
// If the list item does not contain the text phrase fade it out
if ($(this).text().replace('Available','').search(search_regex) < 0)
{
$(this).hide();
// Show the list item if the phrase matches and increase the count by 1
} else {
$(this).show();
count++;
no_matches = false
}
});
if(no_matches){ // if no tr matched the search either, hide whole group
$(this).hide();
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#srch term”).keyup(函数(){
//用于输入的搜索值
//检索输入字段文本并将计数重置为零
var filter=$(this).val(),count=0;
var search_regex=新RegExp(过滤器,“i”)
//循环遍历主容器以及包含匹配项的表体和行
$(“.group容器”).each(函数(){
//检查筛选器是否与组名称或描述匹配
var group_name=$(this).children('h3').text()
var group_description=$(this).children('.uk text muted').text()
如果(group_name.search(search_regex)>=0 | | group_description.search(search_regex)>=0){//过滤器匹配
$(this).show()//显示组
$(this.find(“tbody tr”).show()//和所有子项
返回//跳过tr筛选
}
var no_matches=true
$(this).find(“tbody tr”).each(function(){
//如果列表项不包含文本短语,请将其淡出
if($(this).text().replace('Available','').search(search_regex)<0)
{
$(this.hide();
//如果短语匹配,则显示列表项并将计数增加1
}否则{
$(this.show();
计数++;
无匹配项=false
}
});
如果(no_matches){//如果没有tr匹配搜索,则隐藏整个组
$(this.hide();
}
});
});
});
假定连字符对您不重要(根据您提供的信息,它们看起来很重要),实际上您所要做的就是在比较过程中删除连字符,因此它基本上忽略了它们的存在:
var filter = $(this).val().replace("-", "");
// ...
var group_name = $(this).children('h3').text().replace("-", "");
这对您有用吗?假定连字符对您来说不重要(根据您提供的信息,它们看起来很重要),基本上您所要做的就是在比较过程中删除连字符,因此它基本上忽略了它们的存在:
var filter = $(this).val().replace("-", "");
// ...
var group_name = $(this).children('h3').text().replace("-", "");
这对你有用吗?也许这会有帮助:
//搜索的原始字符串
原始变量='word-143-286 234568 1-s23'
//改进的字符串,其中仅在数字中替换连字符
//只需在这个改进的字符串中运行搜索,而不是使用原始字符串
var改进=原始。替换(/\b([\d]+)\-([\d]+)/g,'$1$2')
//返回word-1 43286 234568 1-s23
console.log(改进)//因此只删除了纯数字中的连字符
这可能会有所帮助:
//搜索的原始字符串
原始变量='word-143-286 234568 1-s23'
//改进的字符串,其中仅在数字中替换连字符
//只需在这个改进的字符串中运行搜索,而不是使用原始字符串
var改进=原始。替换(/\b([\d]+)\-([\d]+)/g,'$1$2')
//返回word-1 43286 234568 1-s23
console.log(改进)//因此只删除了纯数字中的连字符
请花一些时间研究如何处理文本搜索。我能想到的最简单的解决方案是从搜索字符串和div的字符串中删除连字符。似乎您不关心-
。请花些时间研究如何处理文本搜索。我能想到的最简单的解决方案是从搜索字符串和div的字符串中删除连字符。似乎您不关心-
。我能在var过滤器中保持我的计数为0吗?是的!我倾向于分离我的变量声明…但这只是首选项。所以我刚开始尝试这个,它实际上导致它现在不带或不带连字符过滤。所以当我说到连字符时,它就隐藏了regardless@jonathan_Brooks你看到有什么东西会导致这种情况吗?基本上,当它到达连字符时,不管我是否键入它,它都会断开。在var过滤器中,我仍然可以保持我的计数为0吗?是的!我倾向于分离我的变量声明…但这只是首选项。所以我刚开始尝试这个,它实际上导致它现在不带或不带连字符过滤。所以当我说到连字符时,它就隐藏了regardless@jonathan_Brooks你看到有什么东西会导致这种情况吗?基本上,无论我是否键入它,它都会断开连字符。我认为这是有意义的,但由于我处理的是输入值,而不是显式字符串,我如何将其应用于我的JS?抱歉,我还是JS新手,我认为这是有道理的,但是因为我处理的是输入值,而不是显式字符串,我如何将其应用于我的JS?对不起,我对JS还是新手