“this”语法如何工作?

时间:2010-07-07 06:16:21

标签: jquery

这一行

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

相当于这一个?

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

9 个答案:

答案 0 :(得分:9)

由于this始终包含对object of invocation的引用,因此您确实需要 来调用该代码。

如果您在jQuery event handler内调用此内容,this是对DOM element本身的引用,那么您需要先调用$()将其转换为jQuery对象你可以在上面调用jQuery方法。这反过来意味着

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

不会在那里工作。

如果你正在编写一个插件方法,this已经 IS 一个jQuery objectreference),两条线实际上都会这样做。当然,如果this已经是jQuery object你正在做额外的工作,那就试着再次解析它。

示例:

$.fn.yourplugin = function(){
     // this refers to a jQuery object
     return this.each(function(i,v){
     });
});

答案 1 :(得分:4)

这取决于上下文,但可能不是。

如果您有事件处理程序,请说:

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

然后this将引用 DOM元素,而$(this)将创建一个jQuery对象,并允许您在此对象上调用jQuery函数。


另一方面,如果你开发了一个插件并且有

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

然后this引用您调用方法的jQuery对象。

答案 2 :(得分:2)

this指的是它所使用的对象。在全局范围内,它引用window,在方法调用中它引用调用该方法的对象。

在你的情况下,this可能会引用DOM中的一个元素,该元素使用其他jQuery机制(例如事件(clickhover等)或迭代来获取在元素列表上(如jQuery.each)。在这种情况下,您只获得该DOM元素,而不是具有jQuery方法(如attr)扩展名的jQuery对象。因此,您需要使用$构造函数将其转换为jQuery对象。

答案 3 :(得分:1)

$(this)会将DOM Object转换为jQuery对象,因此您可以使用jQuery函数。

所以$(this)this不一样。

答案 4 :(得分:1)

在Javascript中,关键字“this”指的是您所在的上下文对象。因此,如果您正在调用myObj.method1(),那么在method1的代码中,“this”会引用myObj

在jQuery中,大多数操作都返回一个jQuery结果集对象,通常称为jQuery包装器。例如,选择器$("a")将返回包含所有<a> DOM元素的jQuery结果集。 $("a").get(0)将返回第一个锚点DOM元素,$("a").get(1)将返回第二个锚点等。

所以$(this)引用jQuery包装器对象,this引用DOM元素。

总而言之:$(this).get(0)this相同。

答案 5 :(得分:1)

这取决于您使用它的上下文。

$(this)是一个jQuery对象,this是一个DOM对象。

所以,他们不一样。

如果您正在开发jquery插件,那么this$(this)相同。

答案 6 :(得分:0)

没有。听起来你是在用于jquery方法的闭包的上下文中。在函数内,它指向当前的DOM对象,因此jquery函数是不可能的。这就是为什么它用jquery函数包装来获取该对象。

答案 7 :(得分:0)

this始终引用当前函数所属的对象。如果函数是全局的,那通常是window对象,至少如果你在网络浏览器中。

$(this)实际上是$()(主jQuery函数),使用前面提到的this作为参数调用。它将this包装到一个提供所有jQuery方法的jquery对象中。这些方法仅在this上可用。

答案 8 :(得分:-1)

我认为不是。

您可以改用this.id.replace(“_ button”,“”)。