Javascript Jquery:在筛选列表(工作)上,如何:使不区分大小写,计算每个LI选择的关键字数,以及

Javascript Jquery:在筛选列表(工作)上,如何:使不区分大小写,计算每个LI选择的关键字数,以及,javascript,jquery,filter,keyword,case-insensitive,Javascript,Jquery,Filter,Keyword,Case Insensitive,有两三件事我需要帮助,如果你能在其中任何一件事上帮助我/引导我走向正确的方向,那就太好了 1) 使脚本不区分大小写 2) 键入'holy'时将显示'angels,jesus,holy spirit',添加'spirit'时仅显示'holy spirit'。我希望它仍然显示“天使,耶稣,圣灵”,但要更改每个列表项旁边的粉红色数字,以反映每个列表项中有多少关键字与您键入的一个或多个关键字匹配。因此,如果我键入“圣灵”,那么我希望它显示“天使,耶稣,圣灵”列表项,因为它们都有“圣灵”,所以每个列表项的

有两三件事我需要帮助,如果你能在其中任何一件事上帮助我/引导我走向正确的方向,那就太好了

1) 使脚本不区分大小写

2) 键入
'holy'
时将显示'angels,jesus,holy spirit',添加
'spirit'
时仅显示'holy spirit'。我希望它仍然显示“天使,耶稣,圣灵”,但要更改每个列表项旁边的粉红色数字,以反映每个列表项中有多少关键字与您键入的一个或多个关键字匹配。因此,如果我键入
“圣灵”
,那么我希望它显示“天使,耶稣,圣灵”列表项,因为它们都有
“圣灵”
,所以每个列表项的粉色数字应为1,但是“天使”“圣灵”也包含隐藏的关键字
“圣灵”
,因此它们的粉色数字应该分别增加1

  • 天使2
  • 耶稣1
  • 圣灵2
现在,如果我将“大天使”添加到“圣灵”中,那么我已经键入了“圣灵大天使”,那么
“天使”
列表项的粉色数字应该增加到3,因为它包含我键入的关键字中的3个,这是最准确的一个

现在,粉色数字没有任何作用,它会过滤下来,只显示带有确切关键字的列表项。我需要纠正这些事情,非常感谢您的帮助。我花了好几个小时在这上面

  • var filter=$(this).val().toLowerCase()
  • 将过滤器的值设置为小写,并确保所有标记均为小写

  • var filter=$(this).val().toLowerCase()

  • 将筛选器的值设置为小写,并确保所有标记都是小写。

    如果您总是将标记存储为小写,则只需在使用拆分之前将所有键入的条目转换为小写即可。此外,您当前正在匹配文本,而不是标记列表

    完成匹配测试的方式类似于&-和,如果您希望它是|-或当匹配为正时启动false并切换为true,而不是反之亦然

    对于计数,在开始新扫描时将所有值设置为
    0
    ,然后在比较循环中检测到标签时,增加该标签中的值


    更新的演示:

    如果您总是将标记存储为小写,则只需在使用拆分之前将所有键入的条目转换为小写即可。此外,您当前正在匹配文本,而不是标记列表

    完成匹配测试的方式类似于&-和,如果您希望它是|-或当匹配为正时启动false并切换为true,而不是反之亦然

    对于计数,在开始新扫描时将所有值设置为
    0
    ,然后在比较循环中检测到标签时,增加该标签中的值


    更新演示:

    真棒的人,你帮了我很多忙。现在,在键入2个字符之前,它不会开始过滤。如果我键入一个单词,然后在空格中加上一个
    g
    或另一个字母,它会在显示的内容中添加更多列表项,因为多个列表项中有一个
    g
    。你知道如何解决这个问题吗?或者你有什么建议吗?我不想占用你太多的时间,虽然我觉得值得一试。我不知道如何处理这个问题。@android nick:如果你只想让整个单词匹配,那么你可以使用
    $this.text().indexOf(a\u filter)
    来检查匹配,而不是使用
    $this.text().match(“/\b”+a\u filter+“\b/”
    (或类似的东西)
    \b
    表示正则表达式中的单词边界。我确实有这样一个选项:
    $(this.text().search(newregexp(filter,“I”))<0
    ,但经过多次修改后,它不再适用于正则表达式。尝试了你上次评论中的建议,但没有成功,嗯。。。有什么想法吗?@android nick:尝试创建一个regexp,使用我上面提到的
    .match()
    的内容
    var re=new regexp(“\b”+a\u filter+“\b”)
    ,然后使用
    re.test($this.text())
    test函数。我试过了我以为你说的话,但我试过了没用。真棒,你帮了我很多。现在,在键入2个字符之前,它不会开始过滤。如果我键入一个单词,然后在空格中加上一个
    g
    或另一个字母,它会在显示的内容中添加更多列表项,因为多个列表项中有一个
    g
    。你知道如何解决这个问题吗?或者你有什么建议吗?我不想占用你太多的时间,虽然我觉得值得一试。我不知道如何处理这个问题。@android nick:如果你只想让整个单词匹配,那么你可以使用
    $this.text().indexOf(a\u filter)
    来检查匹配,而不是使用
    $this.text().match(“/\b”+a\u filter+“\b/”
    (或类似的东西)
    \b
    表示正则表达式中的单词边界。我确实有这样一个选项:
    $(this.text().search(newregexp(filter,“I”))<0
    ,但经过多次修改后,它不再适用于正则表达式。尝试了你上次评论中的建议,但没有成功,嗯。。。有什么想法吗?@android nick:尝试创建一个regexp,使用我上面提到的
    .match()
    的内容
    var re=new regexp(“\b”+a\u filter+“\b”)
    ,然后使用
    re.test($this.text())
    test函数。我试过了我以为你说的话,但我试过了没用。