Медленный скрипт в IE7 - самый быстрый селектор jquery - PullRequest
1 голос
/ 30 декабря 2011
$.each(data, function (i, val) {
                        $(':checkbox.' + i).prop('checked', (val == 1 ? true : false));
                        $(':text.' + i + ', select.' + i).val(val);
                    });

данные - это JSON-объект. IE7 плачет о медленном скрипте, когда я запускаю это. Я отображаю значения из объекта json в имя класса «i». Есть ли способ заставить этот селектор работать быстрее? Код работает, но скорость итерации каждого элемента должна быть выше, чтобы избавиться от медленного сообщения сценария ie7. Спасибо

Ответы [ 3 ]

1 голос
/ 30 декабря 2011

Не используйте псевдо-селекторы без контейнера или суженного контекста, они медленны и особенно плохи в режиме сравнения IE7 или IE8 по моему опыту.

Переключите синтаксис $(":etc") с помощью $("#container").find("input:text") ипопробуйте заменить $ .each традиционным циклом for (при условии, что $ .each выполняет многократные итерации, в противном случае влияние оказывается незначительным)

также кэшируйте контейнер вне цикла.

var $container = $("#container");
$.each (etc, function(i) {
      var a = $container.find("input:text");
      // do more stuff
}

Некоторая разметка может дать мне возможность быть более точной

0 голосов
/ 30 декабря 2011

Можете ли вы сузить это до родителя?Т.е. вы можете начать с этих элементов внутри формы, элемента div и т. Д.?

var $memoized_form = $( 'form#the_form' );

$.each(data, function (i, val) {
    $memoized_form.find( 'input:checkbox.' + i ).prop('checked', (val == 1 ? true : false));
    $memoized_form.find( 'input:text.' + i + ', select.' + i).val(val);
});
0 голосов
/ 30 декабря 2011

Несколько советов:

  • .prop() обычно медленнее, чем .attr()
  • сужают ваши селекторы: ":checkbox" и ":text"применяется только к входам

    $ ('input: checkbox.' + i) .attr ('флажок', Boolean (val));
    $ ('input: text.' + i + ', выберите. '+ i) .val (val);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...