Как работает синтаксис "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", "").