尝试构建一个自定义过滤系统,其中的元素与用户键入的内容不匹配(将搜索每个元素的id以进行匹配)。它将包含以下内容:
TextBox - 这是用户开始输入以匹配数据集上的id的位置。只有匹配的结果才会显示,而不匹配的结果将被隐藏。如果该框为空或已清除,则将显示所有结果。
数据集 - 这将是div或表行形式的数据。每个父级td
或div
都有唯一的ID。
以下是数据集的示例版本:
<table>
<tr id=".com"><td>.com</td></tr>
<tr id=".com.au"><td>.com</td></tr>
<tr id=".ca"><td>.com</td></tr>
<tr id=".au"><td>.com</td></tr>
</table>
使用上面的例子,这是一个预期结果的例子:
用户类型&#39; om&#39; - 结果(显示应用的css,但jQuery.hide()将正常工作。这只是显示差异):
<table>
<tr id=".com"><td>.com</td></tr>
<tr id=".ca" style="visibility: collapse"><td>.ca</td></tr>
<tr id=".au" style="visibility: collapse"><td>.au</td></tr>
<tr id=".com.au"><td>.com.au</td></tr>
</table>
使用<input type="text" id="search">
,使用jQuery实现此目标的有效方法是什么?
答案 0 :(得分:2)
以下将基于任何用户输入方法
工作plt.contourf
答案 1 :(得分:1)
以下是我如何做到这一点:
var inputValue = $('#search').val();
jQuery('tr:not([id*="' + inputValue + '"])').hide();
这是attribute contains选择器和not选择器的组合。
答案 2 :(得分:1)
我知道我在聚会上有点晚了,但使用indexOf()
采用不同的方法:
$('#search').on('keyup', function(){
var val = $(this).val();
$('#mySearchTbl').find('tr').each(function(){
var tr = $(this);
if(val && tr.attr('id').indexOf(val) <= 0) {
tr.css('visibility', 'collapse');
} else {
tr.css('visibility', 'inherit');
}
})
});
And a fiddle,如果你想看到它的实际效果。只是另一种处理字符串搜索的方法,没有讨厌的RegEx
。
修改强>
我看到Charlie打败了我,并且很好地使用了filter()
方法,所以是的,我会选择那个更可重用的脚本,因为代码可以在没有jQuery的情况下运行,只是有不同的选择器。