更改javascript搜索函数

更改javascript搜索函数,javascript,jquery,Javascript,Jquery,我在html输入/搜索栏上有一个Javascript工作块。除了一个问题外,这一切都非常有效: 现在,它通过精确匹配进行过滤。因此,它搜索页面上的div,如果任何div及其子表具有匹配项,它将从表中删除所有其他行,只留下匹配的行。但目前它与确切的字符串匹配 这只是一个问题,因为我们的很多商品在数字之间都有连字符。因此,如果有人搜索4378-65,它会过滤他们需要的内容,但如果他们输入437865,它会隐藏所有内容,因为从技术上讲,它找不到匹配项 希望是一个简单的修复,但任何帮助都是非常感谢的 J

我在html输入/搜索栏上有一个Javascript工作块。除了一个问题外,这一切都非常有效:

现在,它通过精确匹配进行过滤。因此,它搜索页面上的div,如果任何div及其子表具有匹配项,它将从表中删除所有其他行,只留下匹配的行。但目前它与确切的字符串匹配

这只是一个问题,因为我们的很多商品在数字之间都有连字符。因此,如果有人搜索4378-65,它会过滤他们需要的内容,但如果他们输入437865,它会隐藏所有内容,因为从技术上讲,它找不到匹配项

希望是一个简单的修复,但任何帮助都是非常感谢的

JS:

<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还是新手