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

機能するかどうかはわかりませんが、RegExp の作成中に、inputVal の前にキャレット ( ^ ) を追加してみてください。

これは、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 に答える