我想知道如何根据列值过滤表格行。不包括插件,我想弄清楚如何让这个功能运作。
你的问题比较模糊,但是一般的想法可能是这样的:
$("td").filter(function() {
return $(this).text().indexOf("whatever") !== -1;
}).parent().remove();
这里有一个可行的例子。它首先选择所有表格单元格,然后根据一些文本进行筛选,并删除任何剩余的行的父级(应该是tr
)。
如果您不关心各列,可以选择tr
元素并且不必调用parent
函数。因为text
将返回所选tr
的所有子元素的文本内容。
更新:基于评论
上述方法将从DOM中彻底删除匹配的表格行。 如果您想仅隐藏它们,则可以将remove
替换为hide
。 然后,如果您想再次使行可见,只需执行以下操作:
$("tr").show();
选择所有的元素并将它们显示出来(已经可见的不会受到影响,因此只有之前隐藏的元素会再次变得可见)。这是另一个筛选表格行的示例。将筛选值和表格行文本转换为小写,使得筛选不区分大小写。
$(function() {
$("#filter").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#example-table > tbody > tr").filter(function() { $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div class="form-group">
<label for="filter">Filter:</label> <input type="text" id="filter">
</div>
<table id="example-table">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bob</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Jenny</td>
<td>Smith</td>
<td>51</td>
</tr>
<tr>
<td>Mike</td>
<td>Smithers</td>
<td>52</td>
</tr>
</tbody>
</table>
</body>
</html>
<td>
内容的行。$('tr').filter(":contains('" + searchstring + "')").show();
但是在这种情况下没有必要使用jQuery - 我已经用纯JS编写了解决方案。 您可以在这里找到它。