jQuery中的$(this)和this之间的区别


68

使用$(this)与this之间的根本区别是什么

$('.viewComments').click(function(ev){
    //returns the desired value
    alert(this.getAttribute('id'));

    //Gives an error sayin function is not defined 
    alert($(this).getAttribute('id'));

    //returns the desired value
    alert($(this).attr('id'));
});

我原以为“ $(this)”将包含“ this”具有的所有功能以及更多功能。但是,情况似乎并非如此。

那么,$(this)到底是什么?和

为何我在使用时知道哪些功能可用?(我知道我可以通过firebug来获取它们。但是我想知道是否还有其他方法-可能是一些文档)


Answers:


150

this是DOM对象,而$(this)jQuery包装器是DOM对象。

使用时this,可以在其上调用DOM方法,但不能调用jQuery方法。使用时$(this),您可以在其上调用jQuery方法,但不能调用DOM方法。


那么在我的jquery代码中对此使用$(this)是更有利还是最佳实践呢?
谢尔登·费尔南德斯

1
@谢尔顿:当然。您希望能够使用所有多汁的jQuery优点,不是吗?:-)
克里斯·杰斯特·杨

如果是这样,我如何仅使用一个“ this”获得DOM方法和jQuery方法?
Aldi Unanto 2014年

@AldiUnanto您为什么要做这样的事情?您永远都不想将两者混为一谈。
克里斯·杰斯特·杨

1
@AldiUnanto可维护的编码不是打高尔夫球。:-)如果您希望代码保持可维护性,那么您实际上不应该将两者混为一谈。但是,如果您真的坚持,可以使用一些猴子修补技巧。你没听到我的消息。
克里斯·杰斯特·杨

9

$(this) -代表当前DOM元素,在该元素上调用此函数

this关键字-在JavaScript中,它始终是指我们正在执行的函数的“所有者”,或更确切地说,是函数所使用的方法的对象。


它有助于注意,$(this)代表包装成一个jQuery对象的DOM元素,因为 this指DOM元素作为本地DOM API对象
Shrikant沙拉特

3

在jQuery中,这是指DOM对象,而$(this)是指相同的对象,但添加了jQuery方法

您不能调用,this.each()因为每个都不是DOM方法,而是jquery方法

您可以调用,$(this).each()因为$(this)返回了一个jquery对象


2

$(this)是使用附加到该对象的jQuery选择器或事件选择的当前对象。

因此,如果您$('#myelement').click(.....随后$(this)引用了被单击的元素,则可以$(this).hide()隐藏该元素。




0

在jQuery中,$()符号是jQuery选择器的简写,因此如果您说$(this)要jQuery重新选择对象。然后,您可以使用通常的jQuery函数。
然后,this是由外部jQuery调用(JavaScript)选择的对象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.