jQuery的“标准”插件模式是否需要$(this)

时间:2013-05-07 05:39:48

标签: javascript jquery jquery-plugins

我一直在遵循standard创建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是否必不可少?如果是这样,为什么?

2 个答案:

答案 0 :(得分:2)

是的,是的。

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

答案 1 :(得分:0)

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

«never never $(this)»规则关系到你返回的内容。返回$(this)而不是this的方法会破坏jquery prevObject方法使用的end属性之类的指针。