В чем разница между $(this) и this в jQuery?

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

7 ответов


$(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);
});

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

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


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


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

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

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


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

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

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

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

тут this, относится к якорю, к которому присоединено событие click (функция).


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

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


в 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.