【问题标题】:How to filter a string with multiple words in any given order for javascript?如何以任何给定的顺序为javascript过滤具有多个单词的字符串?
【发布时间】:2016-12-16 01:41:18
【问题描述】:

我对@9​​87654322@ 中的alt 属性有一个简单的过滤器。我把和<INPUT>。 当我搜索一个词时一切正常,但是当我输入另一个相同的词时 "alt" 它什么也不显示。例子 alt = "pyramid green"

  1. 如果我输入 GREEN,它会显示图片
  2. 如果我输入 PYRAMID 它会显示图片
  3. 如果我输入 PYRAMID GREEN,它会显示图片

    4.如果我输入 GREEN PYRAMID 它不显示任何内容

我想要以任何给定顺序搜索alt 属性中的任何给定单词。感谢您的帮助。

function search() {
var filter =  $('input').val().toUpperCase();
var li = $('li');
var a = $('a');
for (i = 0; i < li.length; i++) {
    a = li[i];
    if (a.innerHTML.toUpperCase().indexOf(filter) > -1 ) {    
        li[i].style.display = '';

    } else {
        li[i].style.display = 'none';

    }
}

}

【问题讨论】:

  • 所以您想要使用空格分隔符进行模式搜索?所以 GREEN PYRAMID 应该匹配但 GREE PYR 不应该匹配?
  • 如果 alt 属性有我希望它匹配的单词,不管以什么顺序匹配,如果 GREEN PYR 应该仍然匹配,除非你写 GREEN PYRE

标签: javascript jquery search filtering frontend


【解决方案1】:

您应该将 filter 字符串拆分为空格,就像现在搜索整个字符串一样。

所以你的代码将是:

function search() {

    var filter =  $('input').val().toUpperCase().split(' ');
    var li = $('li');
    var a = $('a');
    for (var i = 0; i < li.length; i++) {
        a = li[i];
        var text = a.innerHTML.toUpperCase();
        for(var f = 0; f < filter.length; f++) {
            if (text.indexOf(filter[f]) > -1 ) {    
                li[i].style.display = '';
                break; // don't need further matches
            } else {
                li[i].style.display = 'none';
            }
        }
    }

}

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2021-09-02
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多