【问题标题】:Looping array from input and getting all matches从输入循环数组并获取所有匹配项
【发布时间】:2014-03-27 02:26:52
【问题描述】:

我正在尝试遍历一组项目,看看是否有任何匹配项然后显示它们。好吧,如果我输入它们都显示的任何字符。

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

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

示例

如果数组是(使用 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 不被认为是按键,因为如果我单击退格键,它不会重新评估条件。

【问题讨论】:

  • 你能分享更多关于如何获得结果的代码
  • 是的,等等,我会添加更多。它只是非常非常冗长
  • @EasyBB 抱歉,works for a not other characters though 是什么意思?
  • @EasyBB 因为dd.style.display = 'none' 而无法工作,请参阅jsfiddle.net/arunpjohny/2X42T/2

标签: javascript regex arrays


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 2019-01-30
    • 2018-04-05
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多