2013-03-25 4 views
2

Я понимаю, что ссылки $('#Counter') снова и снова плохая идея, потому что вы «каждый раз прыгаете в DOM».Как кэшировать элемент DOM?

Но это лучше?

Counter = $('#Counter'); 

И затем внутри цикла:

Counter.val()++ 

Edit:

Исправление к выше фрагмента кода, который должен быть:

Counter.val(Counter.val()+1); 

Или это делает то же самое?

+2

Да, это лучше. Вы запрашиваете DOM один раз против * N * раз. –

+0

Это немного более эффективно использовать переменную, если вы планируете повторно использовать ее более одного раза. jQuery будет кэшировать селектор и результаты, используя переменную, которую вы обходите без необходимости в этом дополнительном коде. –

+0

Да, но переменная просто указывает на DOM. –

ответ

6

Для описанного вами случая желательно сохранить объект jQuery в переменной перед вводом инструкции итерации, в которой вы повторно используете этот объект. Это предотвратит перемещение дерева DOM на каждой итерации. Кроме того, он может быть нечувствителен к поиску по идентификатору, но запрос по имени класса или с использованием составных селекторов может значительно снизить производительность.

var $Counter = $("#Counter"); 
for (...) { 
    $Counter.val(function(i, val) { return +val + 1; }); 
    ... 
} 

Обратите внимание на использование функции в качестве аргумента val() который является более разумным в данном случае.

Смежные вопросы