Почему я должен использовать $ (это)? [дубликат]

16
задан 9 revs, 5 users 45% 23 May 2017 в 11:45
поделиться

5 ответов

  • $ () - это конструктор jQuery функция
  • this - ссылка на элемент DOM вызова

Итак по сути, вы превращаете ссылку на DOM в объект jQuery

В вашем примере вы также можете использовать

listItems.each(function(index, element){
   $(element).css({
   });
});

.. поскольку .each () будет передать оба, индекс + элемент в обратном вызове.

29
ответ дан 30 November 2019 в 15:38
поделиться

this является собственным элементом DOM. $ (this) - это объект jQuery, который позволяет вам вызывать на нем такие функции, как .css () .

8
ответ дан 30 November 2019 в 15:38
поделиться

Я знаю, что немного опаздываю на эту тему, но я просто хотел подчеркнуть тот факт, что избыточная упаковка объектов DOM является одним из наиболее часто совершаемых преступлений против jQuery. Забота о создании экземпляра jQuery может иметь огромное влияние с точки зрения производительности, и это настолько легко сделать, что у вас нет оправдания не делать этого.

Обычно, когда у людей есть объект DOM (независимо от того, упоминается ли он как this или элемент ), они будут пытаться обернуть его каждый раз, когда им понадобится доступ к методу jQuery:

jQuery(this).css('a', 'b');

Проблема в том, что вы делаете это несколько раз:

jQuery(this).css('a', 'b');
jQuery(this).find('span').attr(...);
jQuery(this)....

Каждый раз, когда вызывается jQuery () , создается новый экземпляр jQuery. Такая операция стоит дорого, и ее следует избегать, если это возможно, особенно в петлях!

Чтобы избежать этого, вы можете использовать цепочку со всеми методами, которые возвращают экземпляр jQuery $ (this) .css (a, b) .attr (a, b) ... ) . В остальное время у вас должна быть локально объявленная переменная, которая ссылается на экземпляр jQuery, а затем просто использовать ее:

var self = jQuery(this);
self.css(...);
self.attr(...);

Если вы делаете это в функции обратного вызова .each () , существует по-прежнему создается новый объект jQuery на каждой итерации. Вы можете избежать этого, имея один общий объект jQuery, который вы постоянно изменяете, а затем вы можете запускать методы jQuery из этого единственного экземпляра:

Посмотрите на это:

jQuery.single = function(a){
    return function(b){
        a[0] = b;
        return a
    }
}(jQuery([1]));

Теперь посмотрите на это:

$('a').each(function(i){
    $.single(this).append('Anchor number ' + i);
});

Только один объект jQuery находится использовал. Вы можете сделать это еще быстрее, избегая разрешения идентификаторов:

$_ = $.single;
$('a').each(function(i){
    $_(this).append('Anchor number ' + i);
});

Пища для размышлений . Подробнее здесь : http: //james.padolsey.com / javascript / 76-bytes-for-быстрее-jquery /

8
ответ дан 30 November 2019 в 15:38
поделиться

this обычно является объектом DOM по умолчанию, что означает, что он имеет методы только для обычных объектов DOM.

Если вы хотите вызвать специфичную для библиотеки функцию (например, функцию jQuery .css ), вы должны сначала преобразовать ее в полный объект jQuery, что и является $ () работает по умолчанию, если вы передадите ему объект DOM.

(Вы также можете передать в $ () другие вещи, например строку HTML (для создания нового объекта DOM с оболочкой jQuery) или селектора CSS (чтобы получить набор объектов jQuery, которые соответствуют объектам DOM, соответствующим селектору).

4
ответ дан 30 November 2019 в 15:38
поделиться

Если вы используете Firefox, попробуйте console.log($(this)) и console.log(this), чтобы увидеть разницу.

2
ответ дан 30 November 2019 в 15:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: