Как работает синтаксис "this"?
Эта строка
$(this).attr("id").replace("_button","");
эквивалентно этому?
this.attr("id").replace("_button","");
Ответы
Ответ 1
поскольку this
всегда содержит ссылку на object of invocation
, это действительно зависит от , где вы вызываете этот код.
Если вы вызываете это в jQuery event handler
, this
является ссылкой на сам DOM element
, поэтому вам нужно перевести его в объект jQuery, вызвав $()
, прежде чем вы сможете вызвать на нем методы jQuery. Это, в свою очередь, означает
this.attr("id").replace("_button","");
там не будет работать.
Если вы используете метод плагина, например, this
уже IS a jQuery object
(reference
), и обе строки на самом деле будут делать то же самое. Конечно, если this
уже есть jQuery object
, вы выполняете дополнительную работу, пытаясь снова проанализировать его.
Пример:
$.fn.yourplugin = function(){
// this refers to a jQuery object
return this.each(function(i,v){
});
});
Ответ 2
Это зависит от контекста, но, вероятно, нет.
Если у вас есть обработчик событий, скажите:
$('#_button_foo').click(function() {
$(this).attr("id").replace("_button","");
});
Затем this
будет ссылаться на элемент DOM, тогда как $(this)
создает объект jQuery и позволяет вам вызывать функции jQuery для этого объекта.
С другой стороны, если вы разрабатываете плагин и имеете
jQuery.fn.plugin = function() {
this.each(function() {...});
}
то this
относится к объекту jQuery, на который вы вызываете метод.
Ответ 3
this
относится к объекту, в котором он используется. В глобальной области действия он ссылается на window
, а в вызове метода он ссылается на объект, на который вызывается метод.
В вашем случае this
, вероятно, относится к элементу в DOM, который извлекается с помощью какого-либо другого механизма jQuery, такого как событие (click
, hover
и т.д.) или итерации по списку элементов (например, jQuery.each
). В этом случае вы получаете только этот элемент DOM, но не объект jQuery с расширением методов jQuery, например attr
. Поэтому вам нужно превратить его в объект jQuery, используя конструктор $
.
Ответ 4
$(this) превратит объект DOM в объект jQuery, поэтому вы можете использовать функции jQuery.
Значения $(this)
и this
не совпадают.
Ответ 5
В Javascript ключевое слово "this
" относится к объекту, в котором вы находитесь. Итак, если вы вызываете myObj.method1()
, тогда внутри кода метода method1 "this
" будет ссылаться на myObj
.
В jQuery большинство операций возвращают объект набора результатов jQuery, который часто называют оберткой jQuery. Например, селектор $("a")
вернет набор результатов jQuery, содержащий все элементы <a>
DOM. $("a").get(0)
вернет первый элемент DOM привязки, $("a").get(1)
вернет второй якорь и т.д.
Итак, $(this)
относится к объекту оболочки jQuery, а this
относится к элементу DOM.
Итак, суммируем все: $(this).get(0)
будет таким же, как this
.
Ответ 6
Это зависит от того, какой контекст вы используете.
$(this)
- объект jQuery, а this
- объект DOM.
Итак, они не совпадают.
Если вы разрабатываете плагин jquery, тогда this
совпадает с $(this)
.
Ответ 7
Нет. Похоже, вы находитесь в контексте закрытия, используемого для jquery-метода. Внутри функции он указывает на текущий объект DOM, поэтому функции jquery не будут возможны. Вот почему он обернут функцией jquery для получения этого объекта.
Ответ 8
this
всегда ссылается на объект, членом которого является текущая функция. Если функция глобальна, это обычно объект window
, по крайней мере, если вы находитесь в веб-браузере.
$(this)
фактически $()
(основная функция jQuery), вызываемая с указанным выше значением this
в качестве параметра. Он переносит this
в объект jquery, который предлагает все методы jQuery. Эти методы недоступны только для this
.
Ответ 9
Я думаю, что нет.
Вместо этого вы можете использовать this.id.replace( "_ button", "").