В чем разница между $(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 (функция).
в 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.