1

我使用下面的这个函数在表中快速查找一个项目
我的问题是这个函数只搜索给定表中包含搜索字符串的文本
我一直在尽力修改它以仅匹配以开头的文本搜索字符串但不起作用。

function searchTable(inputVal)
{
    var table = $('#supplier_table_body');
    table.find('tr').each(function(index, row)
    {
        var allCells = $(row).find('td');
        if(allCells.length > 0)
        {
            var found = false;
            allCells.each(function(index, td)
            {
                var regExp = new RegExp(inputVal, '^i');
                if(regExp.test($(td).text()))
                {
                    found = true;
                    return false;
                }
            });
            if(found == true)$(row).show();else $(row).hide();
        }
    });
}

这是我的jQuery

        $('#itemname').keyup(function()
    {
        searchTable($(this).val());
    });
4

4 回答 4

3

字符串起始不是正则表达式修饰符标志,但需要是表达式的一部分:

var regExp = new RegExp('^'+inputVal, 'i');
于 2013-02-13T13:32:37.123 回答
1

不确定它是否有效,但您可以尝试在 inputVal 之前添加一个插入符号 ( ^ ),同时创建 RegExp。

这应该只允许以 inputVal 开头的单词。

干杯,

编辑:

像这样:

new RegExp("^" + inputVal, "i")
于 2013-02-13T13:31:59.877 回答
1

我认为你应该使用 \b: new RegExp("\\b" + inputVal, "i")。它找到以 inputVal 开头的匹配项。

于 2013-02-13T13:35:26.093 回答
0

这个答案作为社区 wiki 答案发布,因为我认为它解决了您遇到的问题并简化了您的代码(但作为评论发布太长),所以我建议,虽然目前未经测试,但将您的功能修改为:

function searchTable(needle){
    var table = $('#supplier_table_body'),
        cells = table.find('td');
    cells.filter(function(){
        return this.textContent.indexOf(needle) !== 0;
    }).closest('tr').hide();
}

简单的概念证明

于 2013-02-13T13:34:57.717 回答