如果您尝试使用jQuery根据输入值隐藏和显示子级,则会在键入时导致性能问题。为避免在每个字符后调用过滤器函数,请使用debounce
的{{1}}方法。
html
lodash
javasrcript
<input id="search" />
<div>
<div class="child">foo</div>
<div class="child">bar</div>
....
</div>
PS:这是此帖子答案的一部分: How to hide the parent div if all its child div are hidden?
答案 0 :(得分:0)
我提出了另一种不带破折号的解决方案。只需在页面加载时使用您的元素创建一个地图(假设它们不变,并且在页面加载时仅创建一次)。
$(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);
});
});
答案 1 :(得分:0)
$("#search").on("keyup", _.debounce(filterChildren, 300));
function debounce( fn, threshold ) {
var timeout;
return function debounced() {
if ( timeout ) {
clearTimeout( timeout );
}
function delayed() {
fn();
timeout = null;
}
timeout = setTimeout( delayed, threshold || 100 );
};
}