用于筛选记录的Jquery代码。最佳技术/代码
这是我的密码。。。我所要做的就是使用jquery通过从数据库中提取的记录的“数据集”进行过滤 这是我的代码,但它非常低效用于筛选记录的Jquery代码。最佳技术/代码,jquery,Jquery,这是我的密码。。。我所要做的就是使用jquery通过从数据库中提取的记录的“数据集”进行过滤 这是我的代码,但它非常低效 <script> $(document).ready(function(){ $("#descriptionField").bind('keyup',function(e){ var filter = $(this).val(); if(filter) { $("#list").find
<script>
$(document).ready(function(){
$("#descriptionField").bind('keyup',function(e){
var filter = $(this).val();
if(filter)
{
$("#list").find("a:not(:contains(" + filter + "))").parent().slideUp();
$("#list").find("a:contains(" + filter + ")").parent().slideDown();
}
});
});
</script>
$(文档).ready(函数(){
$(“#descriptionField”).bind('keyup',函数(e){
var filter=$(this.val();
如果(过滤器)
{
$(“#list”).find(“a:not(:contains(“+filter+”)).parent().slideUp();
$(“#列表”).find(“a:contains(“+filter+”)).parent().slideDown();
}
});
});
您始终可以缓存多次使用的选择:
$(function(){
var $A = $('#list').find('a');
$("#descriptionField").bind('keyup',function(e){
var filter = this.value;
if(filter.length > 0)
{
$A.filter(":not(:contains(" + filter + "))").parent().hide();
$A.filter(":contains(" + filter + ")").parent().show();
}
});
});
我删除了动画slideDown()
和slideUp()
函数调用,以减少CPU密集度show()
和hide()
。另外,我没有使用jQuery来获取输入值,而是使用了this.value
,这应该会快一点
除了使用:not()
和:contains()
的伪选择器之外,您还可以使用过滤器()
来执行以下操作:
$(function(){
var $A = $('#list').find('a');
$("#descriptionField").bind('keyup',function(e){
var filter = this.value;
if(filter.length > 0)
{
$A.filter(function () {
return ($(this).text().indexOf(filter) === -1)
}).parent().hide();
$A.filter(function () {
return ($(this).text().indexOf(filter) > -1)
}).parent().show();
}
});
});
下面是一个jsperf,显示在
.filter()
上使用:contains()
:删除slideUp和slideDown功能时性能的提高,并添加一个节流阀,这样它就不会在每个keyup上运行。这属于。只是想知道为什么它没有被移动,而是关闭?另一个缓存方法是在事件绑定之外创建一个对象,存储以前使用的过滤器关键字。如果已经完成了筛选,请使用该筛选中的选定元素显示和隐藏。我将slideUp和down替换为“显示和隐藏”。非常快。这正是我们需要的。非常感谢你的帮助。@Tony,不客气。如果您更改为.filter()
方法,您的性能将得到另一个提升。