优化:构建jquery集合

时间:2009-09-16 15:21:23

标签: jquery optimization

我有这个构建jquery对象集合的Jquery代码。执行大约需要600毫秒。 我想优化它:

var tousBt = $('img.boutonReduire');
var stack = $('');
tousBt.each( function() {
    var id = $(this).attr('id');
    stack = stack.add('#table' + id).add('#img' + id);
  });

你看到我能做些什么吗?结果必须是jquery对象的集合。

编辑:我获取所有堆栈元素并隐藏它们:stack.addClass('hideit');大约有125个元素。而$('*')。长度可以提供大约7100个元素。

1 个答案:

答案 0 :(得分:3)

首先,删除迭代函数中的赋值操作。 stack是一个实例---没有必要重新分配它:

var tousBt = $('img.boutonReduire');
var stack = $('');
tousBt.each( function() {
    var id = $(this).attr('id');
    stack.add('#table' + id).add('#img' + id);
});

如果你多次调用add(),我还建议远离jQuery开销。这是一个使用轻量级数组来累积选择器的版本:

var tousBt = $('img.boutonReduire');
var stack = [];
tousBt.each( function() {
    var id = this.id;
    stack.push('#table' + id);
    stack.push('#img' + id);
});

然后,获取可以与jQuery一起使用的最终选择器:

var selector = stack.join(','); 
//$(stack.join(','));

编辑:这可能看起来绝对是迟钝的,但这个可能实际上是最快的(至少值得一试):

var tousBt = $('img.boutonReduire');
tousBt.each(function() {
    var id = this.id;
    $('#table' + id).addClass('selected');
    $('#img' + id).addClass('selected');
});
var stack = $('.selected');