javascript搜索框实时过滤需监听input事件,trim并转小写处理关键词,用includes模糊匹配多字段(含中文),innerhtml批量渲染列表,可加防抖优化性能。

在 JavaScript 中实现搜索框输入关键词实时过滤列表数据,核心是监听输入框的 input 事件,每次输入变化时用关键词对原始数据做模糊匹配,并动态更新展示的列表。
监听输入并获取关键词
给搜索框绑定 input 事件(比 keyup 更及时,支持粘贴、语音输入等),实时读取当前输入值:
- 使用
trim()去除首尾空格,避免空搜索或多余空格干扰 - 可转为小写(
toLowerCase())统一大小写,提升匹配容错性 - 若关键词为空,直接显示全部原始数据
对列表做模糊匹配(含中文支持)
遍历原始数据数组,检查每项是否包含关键词。常用方式有:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
item.includes(keyword):适用于简单字符串字段(如item.name) -
item.name.toLowerCase().includes(keyword):增强大小写兼容性 - 多字段匹配:如同时检查
name、desc、tags等字段,任一匹配即保留 - 中文完全支持,
includes对中文字符天然有效,无需额外处理
高效更新 DOM 列表
过滤后得到新数组,重新渲染列表区域,推荐做法:
- 用
innerHTML = filteredList.map(...).join('')一次性生成 HTML 字符串,性能优于频繁appendChild - 若列表项复杂或需绑定事件,建议用
DocumentFragment或现代框架(如 React/Vue),但纯 JS 场景字符串拼接最轻量 - 可加防抖(
debounce)避免高频触发(尤其数据量大时),延迟 200–300ms 再执行过滤
完整小示例(无依赖)
HTML 中有:<input id="search"> 和 <div id="list"></div>;JS 如下:
const data = [{name: "苹果"}, {name: "香蕉"}, {name: "橙子"}];
const searchInput = document.getElementById("search");
const listEl = document.getElementById("list");
function renderList(items) {
listEl.innerHTML = items.map(item =>
`<div class="item">${item.name}</div>`
).join('');
}
searchInput.addEventListener('input', () => {
const keyword = searchInput.value.trim().toLowerCase();
if (!keyword) return renderList(data);
const filtered = data.filter(item =>
item.name.toLowerCase().includes(keyword)
);
renderList(filtered);
});
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










