我有一个看起来像这样的网页(简化示例)
<table id="events_results_table">
<thead>
<tr>
<th class="header">Title One</th>
<th class="header">Title Two</th>
</tr>
</thead>
<thead>
<tr>
<td><input id="search" type="text" /></td>
</tr>
</thead>
<tbody>
<tr>
<td>value 1</td>
<td>...</td>
</tr>
<tr>
<td>value 2</td>
<td>...</td>
</tr>
</tbody>
</table>
我在那个页面上也有一些 javascript,看起来像这样
$("#search").keyup(function(event){
var theText = $('#search').val();
$('#events_results_table tbody tr td').closest('tr').hide();
$('#events_results_table tbody tr td:contains("'+theText+'")').closest('tr').show();
});
这实现了一个基本的文本过滤器,当用户在搜索字段中输入字母时,不匹配的行被隐藏,匹配的行显示。一个简单的表格搜索。
问题是,如果表中有几百行,这种简单的实现就会遇到性能瓶颈。行并不总是响应键盘,或者键盘中的输入会阻塞,直到表格跟上为止。
是否有“已知的科学”以高性能的方式实现这种功能?我自己可以想出一些不同的方法,但想确保在开始之前我没有重新发明一个已经解决的问题。