Javascript 输入框按字符顺序搜索过滤器

标签 javascript

我有下面的代码,其中在搜索框 searcher 的输入中,我的 div 被过滤以匹配我的文本框中的内容。

var searcher = document.getElementById("searcher");
var fruits = document.getElementsByClassName("fruits");
searcher.oninput = function() {
  var matcher = new RegExp(searcher.value, "gi");
  for (i = 0; i < fruits.length; i++) {
    if (matcher.test(fruits[i].innerHTML)) {
      fruits[i].style.display = "inline-block";
    } else {
      fruits[i].style.display = "none";
    }
  }
}
<input type="text" id="searcher" />
<p class="fruits">apples</p>
<p class="fruits">bananas</p>
<p class="fruits">cantaloupe</p>

此代码完全按预期工作。但是,如果我在搜索框中键入 s,则 applesbananas 将显示为结果。我想添加的是一个过滤器,它根据字符顺序扫描我的内容。所以输入 a 作为第一个输入应该只会得到 apples,而 b 应该只会得到 bananas

最佳答案

一种方法是修改您的正则表达式以使用 ^( 开头)。请注意,您需要 escape your string所以它不被视为正则表达式字符:

var searcher = document.getElementById("searcher");
var fruits = document.getElementsByClassName("fruits");
searcher.oninput = function(){
    var matcher = new RegExp("^"+(searcher.value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')), "gi");
    for (i = 0; i < fruits.length; i++){
        if ( matcher.test(fruits[i].innerHTML) ){
            fruits[i].style.display="inline-block";
        }
        else {
            fruits[i].style.display = "none";
        }
    }
}
<input type="text" id="searcher" />
        <p class="fruits">apples</p>
        <p class="fruits">bananas</p>
        <p class="fruits">cantaloupe</p>

尽管更简单的方法是使用 .startsWith() .请注意,您需要为 IE 等尚不支持该方法的浏览器包含 pollyfill:

var searcher = document.getElementById("searcher");
var fruits = document.getElementsByClassName("fruits");
searcher.oninput = function(){
    for (i = 0; i < fruits.length; i++){
        if ( fruits[i].innerHTML.startsWith(searcher.value) ){
            fruits[i].style.display="inline-block";
        }
        else {
            fruits[i].style.display = "none";
        }
    }
}
<input type="text" id="searcher" />
        <p class="fruits">apples</p>
        <p class="fruits">bananas</p>
        <p class="fruits">cantaloupe</p>

关于Javascript 输入框按字符顺序搜索过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45517512/

相关文章:

javascript - 在 Node 中处理嵌套异步等待调用的正确方法是什么?

javascript - 删除数组中的重复对象,但保留在 javascript 中添加一些属性

javascript - 排序在 jQuery DataTables 中不起作用

javascript - jQuery 加载导致 Opera 浏览器加载整个页面

javascript - React,两个组件运行两次超时卸载;相同的卸载被调用两次

javascript - 运行 JavaScript 代码 SublimeText

php - 如何在 php 和 javascript 中创建小部件?

javascript - 如何向 jquery ajax 成功和错误函数添加更多参数

javascript - 如何在加载整个页面之前显示一个 jquery 对话框?

javascript - 在JS中动态设置表头的宽度