本文介绍一种纯JavaScript实现的列表数据筛选方案。通过监听输入框内容,遍历列表项并匹配名称或代码字段。匹配成功的项进行高亮处理,不匹配的项则隐藏。该方法无需后端支持,适用于简短数据的快速前端过滤场景。
本文展示了一个使用JavaScript实现的搜索及高亮显示功能的完整示例。
筛选场景与实现思路
应用场景:用于在前端筛选列表数据。由于单条数据内容较短,未采用PHP加MySQL的后端筛选方案,而是完全使用JavaScript进行前端筛选,对匹配到的数据进行高亮显示,或将不匹配的数据隐藏。
运行效果如下所示。

HTML结构部分。
HTML界面结构
<div class="contracts-header">名称: <input type="text" value="" id="search_contract_name"></div>
<div class="contracts-header">代码: <input type="text" value="" id="search_contract_code" placeholder="不区分大小写"></div>
<div class="contracts-header"><button onclick="search()">查找</button></div>
<div id="contracts-list">
<ul>
<li><input type="checkbox" name="contract[]" value="code|name" /><span>name(code)</span></li>
<li><input type="checkbox" name="contract[]" value="code|name" /><span>name(code)</span></li>
</ul>
</div>
JavaScript逻辑部分。
JavaScript筛选逻辑
function search()
{
var search_contract_name = $("#search_contract_name").val();
var search_contract_code = $("#search_contract_code").val();
if (search_contract_name && search_contract_code) { //两个输入框都有值
search_contract_code = search_contract_code.toLowerCase(); //不区分大小写, 全部转换为小写, 下同
$("input[name='contract[]']").each(
function () {
var code_name = this.value;
var search_code = code_name.toLowerCase().indexOf(search_contract_code);
var search_name = code_name.toLowerCase().indexOf(search_contract_name);
if (search_code >=0 && search_name >=0 ) {
// this.nextSibling.style.backgroundColor = "#FFDEAD"; //高亮匹配到的
this.parentNode.style.display = 'block';
} else {
// this.nextSibling.style.backgroundColor = "";
this.parentNode.style.display = 'none'; //隐藏不匹配的
}
}
);
} else if(search_contract_name || search_contract_code) { //只有一个输入框有值
search_contract_name = search_contract_name.length ? search_contract_name : 'xxx'; //默认为xxx是因为不可能存在xxx
search_contract_code = search_contract_code.length ? search_contract_code.toLowerCase() : 'xxx';
$("input[name='contract[]']").each(
function () {
var code_name = this.value;
var search_code = code_name.toLowerCase().indexOf(search_contract_code);
var search_name = code_name.toLowerCase().indexOf(search_contract_name);
if (search_code >=0 || search_name >=0 ) {
// this.nextSibling.style.backgroundColor = "#FFDEAD";
this.parentNode.style.display = 'block';
} else {
// this.nextSibling.style.backgroundColor = "";
this.parentNode.style.display = 'none';
}
}
);
}
}
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。