Как “этот” синтаксис работает?

Эта строка

$(this).attr("id").replace("_button","");

эквивалентный этому?

this.attr("id").replace("_button","");
10
задан Amarghosh 7 July 2010 в 06:20
поделиться

9 ответов

поскольку this всегда содержит ссылку на объект вызова, это действительно зависит от того, где вы вызываете этот код.

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

this.attr("id").replace("_button","");

не будет работать там.

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

пример:

$.fn.yourplugin = function(){
     // this refers to a jQuery object
     return this.each(function(i,v){
     });
});
9
ответ дан 3 December 2019 в 21:19
поделиться

Это зависит от контекста, но, вероятно, нет.

Если у вас есть обработчик событий, скажите:

$('#_button_foo').click(function() {
     $(this).attr("id").replace("_button","");
});

Затем this будет ссылаться на элемент DOM , тогда как $ (this) создает объект jQuery. и позвольте вам вызывать функции jQuery для этого объекта.


С другой стороны, если вы разрабатываете плагин и имеете

jQuery.fn.plugin = function() {
     this.each(function() {...});
}

, то this относится к объекту jQuery, для которого вы вызываете метод.

4
ответ дан 3 December 2019 в 21:19
поделиться

this относится к объекту, в котором он используется. В глобальной области видимости он относится к window, а в вызове метода он относится к объекту, на котором вызывается метод.

В вашем случае this, вероятно, будет ссылаться на элемент в DOM, который извлекается с помощью другого механизма jQuery, например, события (click, hover и т.д.) или итерации по списку элементов (например, jQuery.each). В этом случае вы получите только этот элемент DOM, но не объект jQuery с расширением методов jQuery, таких как attr. Поэтому вам нужно превратить его в объект jQuery с помощью функции конструктора $.

2
ответ дан 3 December 2019 в 21:19
поделиться

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

Таким образом, $(this) и this - это не одно и то же.

1
ответ дан 3 December 2019 в 21:19
поделиться

Это зависит от того, в каком контексте вы его используете.

$ (this) - это объект jQuery, а this - объект DOM.

Значит, это не одно и то же.

Если вы разрабатываете плагин jquery, то this совпадает с $ (this) .

1
ответ дан 3 December 2019 в 21:19
поделиться

В Javascript ключевое слово 'this' относится к объекту, в контексте которого вы находитесь. Так, если вы вызываете myObj.method1(), то внутри кода method1 'this' будет ссылаться на myObj.

В jQuery большинство операций возвращают объект jQuery result set, часто называемый jQuery wrapper. Например, селектор $("a") вернет jQuery result set, содержащий все элементы DOM. $("a").get(0) вернет первый элемент якоря DOM, $("a").get(1) вернет второй якорь и т.д.

Итак, $(this) относится к объекту-обертке jQuery, а this относится к элементу DOM.

Итак, подведем итог: $(this).get(0) будет то же самое, что и this.

1
ответ дан 3 December 2019 в 21:19
поделиться

Нет. Похоже, вы находитесь в контексте закрытия, используемого для метода jquery. Внутри функции он указывает на текущий объект DOM, поэтому функции jquery невозможны. Вот почему он обернут функцией jquery для получения этого объекта.

0
ответ дан 3 December 2019 в 21:19
поделиться

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

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

0
ответ дан 3 December 2019 в 21:19
поделиться

Думаю, нет.

Вместо этого вы можете использовать this.id.replace ("_ button", "").

-1
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: