В чем разница между $ (этим) и этим в jQuery? - PullRequest
19 голосов
/ 10 сентября 2010

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

Ответы [ 7 ]

26 голосов
/ 10 сентября 2010

$(this) упаковывает this с функциональностью jQuery.

Например, этот код не будет работать:

$('.someDiv').onClick(function(){
    // this refers to the DOM element so the following line would fail
    this.fadeOut(100);
});

Итак, мы завернем this в jQuery:

$('.someDiv').onClick(function(){
    // wrap this in jQuery so we can use jQuery fadeOut
    $(this).fadeOut(100);
});
10 голосов
/ 10 сентября 2010

$(this) украшает любой объект, на который указывает this, с помощью функций jQuery.Типичный вариант использования для this для ссылки на элемент DOM (скажем, <div>).Затем написание $(this) позволяет вам использовать все функции API jQuery для этого <div>.

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

4 голосов
/ 10 сентября 2010

Если в вашем текущем контексте, если this не является объектом jQuery, вы можете сделать его элементом jQuery, обернув его вокруг $().Когда ваш элемент уже является результатом выражения jQuery, this в этом случае уже является объектом jQuery.Так что в этом случае они оба работают одинаково

3 голосов
/ 10 сентября 2010

, чтобы вы поняли немного лучше, найдите себе отладчик такого рода, как Google Chrome, и сделайте это ..

$('a').click(function(){
    console.log(this); //DO
    console.log($(this)); //JO
});

это покажет вам, в чем разница:)

2 голосов
/ 10 сентября 2010

this - это переменная javascript, созданная всякий раз, когда вы находитесь внутри функции, которая присоединена к объекту. В этих случаях this относится к этому объекту.

$(this) возвращает объект jQuery, для которого вы можете вызывать функции jQuery, но будет применяться только к this.

Например, если вы установите обработчик щелчка для всех якорей:

$('a').click(function() {
    console.log(this.href) ;
}) ;

тогда this относится к якору, к которому прикреплено событие (функция) щелчка.

1 голос
/ 10 сентября 2010

$ (это) == это? интересно.

это не должно проходить мимо события DOM.

0 голосов
/ 10 сентября 2010

В JavaScript это всегда относится к «владельцу» выполняемой функции. Использование $ (this) обернет владельца только так, что все операции jQuery будут расширены и доступны для него.

Рассмотрим:

$links = $('#content a');

$links.click(function() {
    link  = this;
    $link = $(this); //jQuery wrapped object.

    alert(link.getAttribute('href'));        
    alert($link.attr('href')); //we can use the attr() function from jQuery
});

Они обычно дают одинаковые результаты, так как владелец один и тот же, только если он упакован jQuery, он может работать с функциями jQuery.

...