2025年12月17日/ 浏览 15
正文:
在现代 Web 开发中,动态表格的数据搜索与过滤是高频需求。无论是管理后台还是数据展示页面,快速定位信息的能力直接影响用户体验。本文将手把手教你用原生 JavaScript 实现这一功能,并结合异步 API 数据过滤,打造响应迅速的交互方案。
首先构建一个包含搜索框和表格的简单页面:
html
| ID | 姓名 | 邮箱 |
|---|
假设我们已有本地数据数组,先实现基础搜索逻辑:
// 模拟数据
const users = [
{ id: 1, name: "张三", email: "zhang@example.com" },
{ id: 2, name: "李四", email: "li@example.com" }
];
// 渲染表格函数
function renderTable(data) {
const tbody = document.querySelector('#dataTable tbody');
tbody.innerHTML = data.map(user => `
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
</tr>
`).join('');
}
// 搜索功能
document.getElementById('searchInput').addEventListener('input', (e) => {
const keyword = e.target.value.toLowerCase();
const filtered = users.filter(user =>
user.name.toLowerCase().includes(keyword) ||
user.email.toLowerCase().includes(keyword)
);
renderTable(filtered);
});
// 初始渲染
renderTable(users);
实际项目中,数据往往来自后端 API。我们改造代码支持异步过滤:
async function fetchData() {
const response = await fetch('https://api.example.com/users');
return await response.json();
}
// 修改搜索逻辑为异步
document.getElementById('searchInput').addEventListener('input', async (e) => {
const keyword = e.target.value.toLowerCase();
const allData = await fetchData();
const filtered = allData.filter(user =>
user.name.toLowerCase().includes(keyword) ||
user.email.toLowerCase().includes(keyword)
);
renderTable(filtered);
});
// 初始化加载
fetchData().then(renderTable);
防抖处理:避免频繁触发 API 请求
javascript
let debounceTimer;
searchInput.addEventListener('input', (e) => {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
// 搜索逻辑...
}, 300);
});
前端缓存:对已获取的数据进行本地存储
javascript
let cachedData = null;
async function getData() {
if (!cachedData) {
cachedData = await fetchData();
}
return cachedData;
}
通过以上步骤,我们不仅实现了基础的客户端搜索,还扩展出适应真实场景的异步数据过滤方案。关键点在于理解数据流的变化过程:从用户输入 → 触发过滤 → 更新渲染的完整闭环。这种模式可以灵活应用到各种前端数据交互场景中。