4

我一直在遵循创建 jQuery 插件的标准方法。特别是关于不污染 fn 命名空间的一点。但是,我遇到了一些奇怪的事情,它违反了它自己的“从不使用$(this)规则”。

var methods = {
 init : function( options ) {

   return this.each(function(){

     var $this = $(this), //HERE
         data = $this.data('tooltip'),
         tooltip = $('<div />', {
           text : $this.attr('title')
         });

     // If the plugin hasn't been initialized yet
     if ( ! data ) {

       /*
         Do more setup stuff here
       */

       $(this).data('tooltip', {
           target : $this,
           tooltip : tooltip
       });

     }
   });
 },

this在这种特殊情况下重新评估是否必要?如果是这样,为什么?

4

2 回答 2

2

是的。

在方法内部,this指的是用于调用插件的 jQuery 对象,但您正在使用each循环这些元素。在 for 的回调中eachthis引用来自 jQuery 对象的 DOM 元素,因此您需要为每个元素创建一个新的 jQUery 对象,以便在其上使用 jQuery 方法。

于 2013-05-07T05:43:30.590 回答
0

each循环中,this是 DOM 元素,因此$(this)在其上使用 jquery 方法是必不可少的。

“从不使用$(this)”规则涉及您返回的内容。返回$(this)而不是返回的方法this会破坏指针,例如jquery方法prevObject使用的属性。end

于 2013-05-07T06:03:25.777 回答