我已经适应从一个教程,基于它们的内容过滤li元素下面的代码:提高JQuery的的性能发现
$('#_selectSearch_' + index).keyup(function() {
var filter = $(this).val();
if(filter) {
$('#_selectDrop_' + index).find("li:not(:contains(" + filter + "))").slideUp();
$('#_selectDrop_' + index).find("li:contains(" + filter + ")").slideDown();
} else {
$('#_selectDrop_' + index).find("li").slideDown();
}
});
代码工作得很好,但大名单的工作时很慢使浏览器在每次按键时都会停顿几秒钟。我一直在环顾四周,得出结论认为改进方法是以某种方式缓存列表,而不是直接在DOM上操作,但不知道如何实现。
这是一个锻炼,或者你需要一个直播网站/项目的信息?我问,因为答案会有所不同。 – gibberish
很可能slideUp和slideDown是性能问题发生的地方,而不是.find。但是,您可以使用.find + .filter或.not来优化.find。 '.find(“li”)。not(“:contains(”+ filter +“)”);' –
@ChrisBurdon如果没有匹配,你想要显示所有项目。是对的吗? – Bruno