jquery这对$(这个)甚至可能是$ this

时间:2012-01-03 22:38:29

标签: javascript jquery

我经常看到在jquery中使用关键字this的示例。有时我看到它与$和括号一起使用,有时没有。我以为我看到它与每个都使用了一些。

所以,

 var id = this.attr('id');

 var id = $(this).attr('id');

 var id = $this.attr('id');

这些都一样吗?有首选方式吗? this是一个javascript的东西,而$(this)是一个jQuery的东西吗?如果是,那么$this会落在哪里?

我知道这可能是一个全新的问题,但我无法让简单的this本身工作。我只能$(this)才能工作。我不确定我做错了什么,或者我是否一直在阅读错别字的例子。

4 个答案:

答案 0 :(得分:11)

this是一个JavaScript的东西。它指的是函数运行的“上下文”。对于大多数事件处理程序,它是正在侦听事件的(“原始”)DOM元素。在其他情况下,它将意味着其他事情;谷歌搜索“JavaScript中的this”可能具有启发性。


我说它是“原始”DOM元素,因为jQuery通常用于在jQuery包装器中包装普通DOM元素,所以你可以使用像attr这样的jQuery方法而不是通常的(getAttributesetAttribute等)。这个包装是使用$函数完成的,您可以在这里看到$(this)。例如:

this.getAttribute("href")
/* or */ someElement.getAttribute("href")

相同
$(this).attr("href")
/* or */ $(someElement).attr("href")

$thisthis$只是一个变量名称。但是,做

之类的作业通常是常规的
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

的一个很好的解释

http://www.learningjquery.com/2007/08/what-is-this

答案 3 :(得分:1)

而不是多次调用$(this),将其存储为变量(通常称为$this)会更有效,以便人们知道它是什么。