这一行
$(this).attr("id").replace("_button","");
相当于这一个?
this.attr("id").replace("_button","");
答案 0 :(得分:9)
由于this
始终包含对object of invocation
的引用,因此您确实需要 来调用该代码。
如果您在jQuery event handler
内调用此内容,this
是对DOM element
本身的引用,那么您需要先调用$()
将其转换为jQuery对象你可以在上面调用jQuery方法。这反过来意味着
this.attr("id").replace("_button","");
不会在那里工作。
如果你正在编写一个插件方法,this
已经 IS 一个jQuery object
(reference
),两条线实际上都会这样做。当然,如果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机制(例如事件(click
,hover
等)或迭代来获取在元素列表上(如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”,“”)。