javascript - 从输入循环数组并获取所有匹配项

标签 javascript regex arrays

我正在尝试遍历项目数组并查看其中是否匹配,然后显示它们。好吧,如果我输入任何字符,它们都会显示。

(sensitive == false ? RegExp('^'+this.value,'i').test(source[i]) : RegExp('^'+this.value).test(source[i]) )

这是我的条件,但如果 this.value = a 数组 (source[i]) 中的每个项目都显示向上。有没有办法让它更严格?

示例

如果数组是(使用 jquery 自动完成示例数组)

var availableTags = [
    "ActionScript",
    "AppleScript",
    "Asp",
    "BASIC",
    "C",
    "C++",
    "Clojure",
    "COBOL",
    "ColdFusion",
    "Erlang",
    "Fortran",
    "Groovy",
    "Haskell",
    "Java",
    "JavaScript",
    "Lisp",
    "Perl",
    "PHP",
    "Python",
    "Ruby",
    "Scala",
    "Scheme"
];
element.addEventListener('keypress', function (e) {
    var dd = document.getElementById('fake_dropdown');
    for (i = 0; i < availableTags.length; i++) {
        var li;
        if ((sensitive == false ? RegExp('^' + this.value, 'i').test(availableTags[i]) : RegExp('^' + this.value).test(availableTags[i]))) {
            li = document.getElementById('auto_id_' + (i + 1));
            li.style.display = "block";
        } else {
            li = document.getElementById('auto_id_' + (i + 1));
            li.style.display = "none";
        }
        var liLoop = dd.getElementsByTagName('li');
        for (var j = 0; j < liLoop.length; j++) {
            if (liLoop[j].style.display == "block") break;
            else dd.style.display = "none";
        }
    }
}, false);

更新了更多代码

这些都出现了。为什么是这样?另外,为什么 BACKSPACE 不被视为按键,因为如果我单击退格键,它不会重新评估条件。

最佳答案

el.addEventListener('focus', function (e) {
    lastIndex = this;
    if (typeof focus == 'function') focus.call(this, this);
}, false);
//use keyup handler since keypress will not be fired for unprintable characters
//don't register the handler inside the focus handler since it can cause multiple event registrations
el.addEventListener('keyup', function (e) {
    var dd = document.getElementById('fake_dropdown'),
        items = 0;
    var top, left, height, width, bottom;

    var term = this.value,
        //move this out out the for loop
        regex = (sensitive == false ? new RegExp('^' + this.value, 'i') : new RegExp('^' + this.value));

    for (i = 0; i < source.length; i++) {
        var li = document.getElementById('auto_id_' + (i + 1));
        if (regex.test(availableTags[i])) {
            li.style.display = "block";
            items++;
        } else {
            li.style.display = "none";
        }
    }
    if (items == 0) {
        dd.style.display = "none";
    } else {
        top = el.offsetTop
        left = el.offsetLeft;
        height = el.offsetHeight;
        width = el.offsetWidth;
        bottom = top + height;
        dd.style.left = left + 'px';
        dd.style.top = bottom + 'px';
        dd.style.width = width + 'px';
        dd.style.display = "block";
    }
}, false);

演示:Fiddle

关于javascript - 从输入循环数组并获取所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22677135/

相关文章:

c# - 最大数组维度,如 a[1][1][1][1]....[1]在 C#

javascript - 在 Array.map 上返回未定义

JavaScript 按键对数组排序?

javascript - 如何使用cheerio 获取脚本内容

javascript - typescript 不捆绑模块

javascript - 将使用 'passport' 创建的 javascript var 传输到 Express 路由器

regex - 验证字符串的前半部分与后半部分相同

php - 无法从路径 mysql php 找到同级文件夹和文件

javascript - 使用编辑模式创建表单

java - 是否可以创建一个正则表达式来查找与模式不匹配的字符串?