8

我想知道为什么在这么多 jquery 插件中 $(this) 设置为指向 $this,这是一个示例,如果我在页面上包含以下两个插件:

(function($) {
   jQuery.fn.pluginOne = function() {
      return this.each(function() {
         $this = $(this); <--
         alert($this);
      });
   };
})(jQuery)

(function($) {
   jQuery.fn.pluginTwo = function() {
      return this.each(function() {
         $this = $(this); <--
         alert($this);
      });
   };
})(jQuery)

当我在 dom 上调用两个插件时:

$(document).ready({
   $('.myClass').pluginOne();
   $('.myOtherClass').pluginTwo();
});

第一个插件将从第二个插件获得 $this ......而我将 $(this) 指向本地变量:

(function($) {
   jQuery.fn.pluginTwo = function() {
      return this.each(function() {
         var trigger = $(this); <--
         alert(trigger);
      });
   };
})(jQuery)

一切正常,当然应该......

所以我的问题是......我什么时候应该使用 $this?

谢谢

4

3 回答 3

12

$this 是人们用来在变量中缓存实际 jQuery 对象 $(this) 的标准。

您可以随意称呼它,有些人喜欢将其称为 $self。

例如

var $self = $(this)

当您查看代码以识别它是 jQuery 对象而不是普通的 dom 对象时,它只会有所帮助。

它执行得更好,因为您只创建了一个 jQuery 变量的实例。

于 2009-07-21T11:19:00.470 回答
9

$是 Javascript 中变量和函数名称的合法字符。如果您来自 PHP,其中$仅用于表示变量(我花了一段时间才意识到),那可能会令人困惑。

  • 在 jQuery 中,$是 function 的别名jQuery,它是处理 DOM 选择的主要函数。$("#header ul.menu")是一样的jQuery("#header ul.menu")$只是为了简洁起见。

  • this是 Javascript(不是 jQ)中的一个特殊术语,表示当前元素(例如您可能会看到this.submit()的形式)。

  • $(this)jQuery意思是“用 Javascript调用函数this”。

  • $this只是一个变量,因为$它是一个有效字符。您可以设置$this为您喜欢的任何值,它与 Javascript 的this. 一般来说,我建议不要将 $ 用于变量名,以避免与 jQuery 函数混淆。但是,与普通的 Javascript 变量相反,它可能用于$var表示 jQuery 对象。

于 2009-07-21T12:01:01.807 回答
2

如果您使用包装在 jQuery 对象中的元素执行许多不同的命令,那么只获取元素(作为包装集)一次并将其存储在局部变量中会更高效

var $this = $(this);
// then use $this in your function. 

注意varto local scope的使用$this

于 2009-07-21T11:21:12.713 回答