0
jsonデータに基づいて動的に生成されるテーブルに対して、次の検索機能があります。検索機能は次のとおりです。Regex検索機能は最初の列でのみ動作し、2番目以降のワードでは他の列でのみ動作します
var $rows = $('#toolsTable tr:not(:first)');
$('#search').keyup(function() {
var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$',
reg = RegExp(val, 'i'),
text;
$rows.show().filter(function() {
text = $(this).text().replace(/\s+/g, ' ');
return !reg.test(text);
}).hide();
});
テーブルの例は次のとおりです。
Name | Description | Source | Comments
-----|-------------|--------|--------------------
John | Test one two| Reddit | Here is the comment
Jay B| One try here| Stack | Second comment
私はJohn
を検索すると、それは完璧に動作します。 Test
を検索すると、すべてがフィルタリングされて機能しませんが、one
を検索すると、データの最初の行(Johnの行)のみが表示されます。これは、検索が最初の(Name)以外のすべての列に対して2番目以降の単語に対してのみ機能するためです。 Reddit
またはStack
と入力すると、何も表示されません。これを理解する助けとなることは大変ありがたいことです。私は一般的にJavascriptとWeb開発者にはかなり新しいです!ありがとう!
EDIT:理由はわかりませんが、デバウンス機能を追加すると実際に修正されました。
もっと簡単な '$(this).text().indexOf(searchTerm)=== -1'テストでフィルタリングできませんか? –