jQuery表行按列过滤是指使用jQuery库对HTML表格中的行进行筛选显示,基于特定列的内容匹配用户输入的过滤条件。这是一种常见的前端数据处理技术,可以在不重新加载页面的情况下动态显示符合条件的数据行。
<!DOCTYPE html>
<html>
<head>
<title>jQuery表行过滤</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.filter-input { margin-bottom: 10px; }
</style>
</head>
<body>
<div class="filter-input">
<input type="text" id="nameFilter" placeholder="按姓名过滤">
<input type="text" id="ageFilter" placeholder="按年龄过滤">
<input type="text" id="cityFilter" placeholder="按城市过滤">
</div>
<table id="dataTable">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>城市</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>张三</td>
<td>25</td>
<td>北京</td>
</tr>
<tr>
<td>2</td>
<td>李四</td>
<td>30</td>
<td>上海</td>
</tr>
<tr>
<td>3</td>
<td>王五</td>
<td>28</td>
<td>广州</td>
</tr>
<tr>
<td>4</td>
<td>赵六</td>
<td>35</td>
<td>深圳</td>
</tr>
</tbody>
</table>
<script>
$(document).ready(function() {
// 为每个过滤输入框绑定事件
$('#nameFilter, #ageFilter, #cityFilter').on('keyup', function() {
filterTable();
});
function filterTable() {
var name = $('#nameFilter').val().toLowerCase();
var age = $('#ageFilter').val().toLowerCase();
var city = $('#cityFilter').val().toLowerCase();
$('#dataTable tbody tr').each(function() {
var row = $(this);
var nameMatch = row.find('td:eq(1)').text().toLowerCase().indexOf(name) > -1;
var ageMatch = row.find('td:eq(2)').text().toLowerCase().indexOf(age) > -1;
var cityMatch = row.find('td:eq(3)').text().toLowerCase().indexOf(city) > -1;
if (nameMatch && ageMatch && cityMatch) {
row.show();
} else {
row.hide();
}
});
}
});
</script>
</body>
</html>
// 更高级的过滤函数,支持多条件组合
function advancedFilterTable() {
var filters = {
name: $('#nameFilter').val().toLowerCase(),
age: $('#ageFilter').val().toLowerCase(),
city: $('#cityFilter').val().toLowerCase()
};
$('#dataTable tbody tr').each(function() {
var row = $(this);
var showRow = true;
// 检查每个过滤条件
$.each(filters, function(index, value) {
if (value !== '') {
var cellText = row.find('td:eq(' + (index + 1) + ')').text().toLowerCase();
if (cellText.indexOf(value) === -1) {
showRow = false;
return false; // 退出循环
}
}
});
showRow ? row.show() : row.hide();
});
}
原因:JavaScript字符串比较默认区分大小写 解决:将所有比较转换为统一大小写(如示例中的toLowerCase())
原因:每次按键都遍历所有行 解决:
// 使用防抖技术优化
var debounceTimer;
$('.filter-input').on('keyup', function() {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(function() {
filterTable();
}, 300); // 300毫秒延迟
});
原因:某些特殊字符在正则表达式中有特殊含义 解决:对输入进行转义或使用indexOf代替正则匹配
原因:过滤函数绑定在DOM加载时,新数据没有绑定事件 解决:使用事件委托或重新绑定过滤函数
通过jQuery实现表行按列过滤是一种高效、灵活的前端数据处理方案,能够显著提升用户交互体验。
没有搜到相关的沙龙