javascript - 如何使用 jquery 和 lodash 去抖动输入
问题描述
如果您尝试使用 jQuery 根据输入值隐藏和显示子项,则会在键入时导致性能问题。为避免在每个字符后调用过滤器函数,请debounce
使用lodash
.
html
<input id="search" />
<div>
<div class="child">foo</div>
<div class="child">bar</div>
....
</div>
java脚本
var filterChildren = function() {
var value = $(this).val().toLowerCase();
$(".child").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
});
};
$("#search").on("keyup", _.debounce(filterChildren, 300));
PS:这是这篇文章答案的一部分: 如果所有子div都被隐藏,如何隐藏父div?
解决方案
我提出了另一种没有 lodash 的解决方案。只需在页面加载时使用您的元素创建地图(假设它们不会更改并且仅在页面加载时创建一次)。
$(document).ready(function(){
var map = {};
$('.child').each(function(i,el){
map[$(el).text().toLowerCase()] = $(el);
});
$('.child').toggle(false);
$('#search').on('keyup', function(){
$('.child').toggle(false);
var el = map[$(this).val().toLowerCase()];
if (el)
$(el).toggle(true);
});
});
推荐阅读
- jsp - 如何使用 JSTL 在 JSP 页面之间传递数据?
- php - 错误:在 null 和警告上调用成员函数:未初始化的字符串偏移量
- javascript - mongodb聚合:如何将分钟添加到日期字段然后进行比较
- google-cloud-platform - 阅读 BigQuery 表的最佳方式
- paypal - PayPal\Api\Payment - getState()
- javascript - SignalR 不会回退到旧协议
- ios - 当 AVPlayerViewController 退出FullScreenAnimated 时如何得到通知
- docker - 无法在运行时使用 docker 映像中的环境变量更改文件的内容
- wpf - 适合按钮宽度
- r - R Studio 中的因子分析:公式和 Excel 数据