我经常看到在jquery中使用关键字this
的示例。有时我看到它与$和括号一起使用,有时没有。我以为我看到它与每个都使用了一些。
所以,
var id = this.attr('id');
var id = $(this).attr('id');
var id = $this.attr('id');
这些都一样吗?有首选方式吗? this
是一个javascript的东西,而$(this)
是一个jQuery的东西吗?如果是,那么$this
会落在哪里?
我知道这可能是一个全新的问题,但我无法让简单的this
本身工作。我只能$(this)
才能工作。我不确定我做错了什么,或者我是否一直在阅读错别字的例子。
答案 0 :(得分:11)
this
是一个JavaScript的东西。它指的是函数运行的“上下文”。对于大多数事件处理程序,它是正在侦听事件的(“原始”)DOM元素。在其他情况下,它将意味着其他事情;谷歌搜索“JavaScript中的this
”可能具有启发性。
我说它是“原始”DOM元素,因为jQuery通常用于在jQuery包装器中包装普通DOM元素,所以你可以使用像attr
这样的jQuery方法而不是通常的(getAttribute
,setAttribute
等)。这个包装是使用$
函数完成的,您可以在这里看到$(this)
。例如:
this.getAttribute("href")
/* or */ someElement.getAttribute("href")
与
相同$(this).attr("href")
/* or */ $(someElement).attr("href")
$this
或this$
只是一个变量名称。但是,做
var $this = $(this);
这样做的原因是为了避免不断调用$
函数,这有点贵,因为它每次都会创建一个新的jQuery包装器对象。如果将包装的元素存储在变量中,则效率会略有提高。
在极少数情况下,this
可能已经是jQuery包装器。经常出现的情况是编写jQuery插件时。在这种情况下,您可以直接执行this.attr("id")
之类的操作,而无需先将其包装起来,因为它已经被包装。在通常情况下(事件处理程序,$.each
等),包装器是必需的。
答案 1 :(得分:8)
'this'是一个用于引用当前对象的Javascript对象关键字,'$(this)'是将当前对象转换为jQuery对象的jQuery包装函数,当你看到'$ this'时它通常引用对于开发人员创建的引用$(this)对象的变量,它在$ .each循环中很有用。例如:
$(function(){
$('a').click(function(){
var $this = $(this); // refers to the $('a') object
$('div').each(function(){
$(this).hide(); // $(this) refers to each 'div' in the loop, not the $('a')
$this.css({ color: 'blue' }); // turns the link element text blue
});
});
});
答案 2 :(得分:5)
this
是一个引用当前对象的本机Javascript对象。在使用jQuery.fn.
定义的jQuery函数中,this
本身就是一个jQuery对象。 $(this)
是jQuery将Javascript this
转换为jQuery对象的方法。而$this
只是一个变量名。如果您尚未定义它,则为undefined
。
这是对jQuery使用this
:
答案 3 :(得分:1)
而不是多次调用$(this)
,将其存储为变量(通常称为$this
)会更有效,以便人们知道它是什么。