Является ли event.currentTarget всегда равным $(this) в jQuery?
Является ли эта фраза всегда верной?
$("p").click(function(event) {
alert( event.currentTarget === this );
});
Один метод предпочтительнее другого? Мне нравится использовать $(this)
вместо event.currentTarget
, но можно ли улучшить ситуацию в некоторых условиях? Что лучше? Абсолютно то же самое?
И еще один нюанс - когда проверка на firebug console.log(this)
и console.log($(this))
дает мне точно такой же элемент. Если они одинаковые - что другое? (поскольку я знаю, что могу написать это $(this).css('color','white')
, но не могу написать this.css('color','white')
Ответы
Ответ 1
Как правило, да, это будет то же самое. Вы можете сделать это по-другому, используя $.proxy
для управления контекстом, но на практике вы, вероятно, никогда этого не сделаете.
$(document.body).on('click', $.proxy(function(e) {
console.log(this); // window
console.log(e.currentTarget); // document.body
}, window));
Что касается другого вопроса, this
является родным элементом DOM, тогда как $(this)
является объектом jQuery, который обертывает этот элемент DOM. Оболочка jQuery означает, что вы можете запускать функции jQuery, такие как css
, которые недоступны для собственных элементов DOM.
И, чтобы ответить на точную формулировку вашего вопроса, event.currentTarget
обычно равен this
, а не $(this)
.
Ответ 2
Часть вашего ответа выше. Я надеюсь, что это будет достаточно ясно.
Нет console.log(this)
и console.log($j(this))
не даст вам того же результата. $(this) преобразует это в объект jQuery и, следовательно, вы можете вызвать методы типа .css, которые могут быть вызваны в объектах jQuery ($ (this)), а не HTML-элементы, которые будут this
.
Ответ 3
Это свойство обычно будет равно значению функции.
Если вы используете jQuery.proxy или другую форму манипуляции с областью видимости, это будет равно любому контексту, который вы предоставили, а не event.currentTarget