2015-05-28 4 views
5

Разработчики, которых я знаю, часто повторяют одни и те же селектора JQuery, вместо того, чтобы сохранять результат в переменной. Они согласуются с этим подходом.Можно ли сохранить результат селектора JQuery в переменной?

Например, они делают это:

var propName = $(this).attr('data-inv-name'); 
var propValue = $(this).attr('data-inv-value'); 

Вместо этого:

var current = $(this); 
var propName = current.attr('data-inv-name'); 
var propValue = current.attr('data-inv-value'); 

Последний подход чувствует правильным для меня, но, может быть, я что-то не хватает. Это простой пример, но я видел $ (это) несколько десятков раз в одной и той же функции.

Какова наилучшая практика для разработки с помощью JQuery? Переключатели вызовов многократно или сохраняются в переменной?

+1

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

+0

И dupe -> http://stackoverflow.com/questions/10432228/storing-this-in-a-variable – adeneo

+1

Не совсем обман. Пример, который я дал, был '$ (this)', но я спрашиваю о селекторах вообще. '$ ('# someid')', '$ ('. someclass')' и т. д. –

ответ

8

показан анализ микро оптимизации. Повторное использование $(this) в сравнении с хранением $(this) в переменной и повторное использование не приведет к значительным ударам по производительности.

Время, в которое вы действительно хотите сохранить результат, - это когда есть реальный селектор. Единственный удар, который вы делаете, повторно вызывая $(this), вызывает функцию конструктора jQuery, которая очень легка.

Итак, в этом случае идите с тем, что читается лучше. Если действительно есть дюжина вхождения $(this) в строке, то должно быть либо некоторое хранение переменной, как указано, либо, скорее всего, появилась возможность воспользоваться цепочкой, которая была упущена.

+2

Также отличный ответ. , , если есть время, когда я отклоняюсь от того, что ** godmode ** вложил в его ответ, это когда я использую '$ (this)'. , ,это выбор, который вы действительно пытаетесь избежать повторения, и, честно говоря, во многих отношениях «это» очень описательно в вашей логике. – talemyn

+0

Я видел повторение с селектором и без него. Я буду следить за повторными выборами и использовать переменные, но оставит '$ (это)' один. Хороший ответ и спасибо. –

6

Если я собираюсь использовать один и тот же селектор более двух раз, я всегда создаю переменную. Один изменение, которое я рекомендовал бы это с помощью $ перед вашим именем переменной, чтобы показать, что это объект JQuery

var $current = $(this); 
var propName = $current.attr('data-inv-name'); 
var propValue = $current.attr('data-inv-value'); 
+1

Я тоже это делаю, но для меня это, если я использую его более одного раза. – talemyn

+1

Согласовано. Я также стараюсь хранить $ (this) в описательной переменной всякий раз, когда я устанавливаю функции обратного вызова событий, и неясно, к чему относится $ (this). –

0

В теории выбора компонентов во много раз требует больше процесса, то, используя один у вас уже есть ...

Если вы не слишком много селекторов в вашей странице различию будет почти нулевой (я предполагаю, что это тем больше commom случае) ... Тогда вы можете думать о том, что делает его более читаемым или легко модифицировать ...

Иногда вы используете один и тот же элемент из дюжины строк, в этом случае я предпочитаю назначать это переменная, потому что при изменении элемента мне нужно будет изменить только одну строку (строка, которую я назначил переменной) ...

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