Оптимизация: создание коллекции jquery - PullRequest
1 голос
/ 16 сентября 2009

У меня есть этот код 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 элементов. И $ ('*'). Length дают около 7100 элементов.

1 Ответ

3 голосов
/ 16 сентября 2009

Прежде всего, удалите операцию присваивания внутри вашей итерационной функции. stack - это экземпляр --- переназначать его не нужно:

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

Я бы также предложил избавиться от накладных расходов jQuery, если вы звоните add() тонны раз. Вот версия, использующая облегченный массив для накопления селекторов:

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...