2012-01-29 61 views
0

我開始在自己的命名空間中編寫更多的jQuery插件,以便我可以重新使用代碼並保持代碼乾爽。在jQuery插件中添加其他功能

我是新來的整個插件創作,但讀了幾個來源,包括官方的jQuery之一。

下面是一個例子,我發現,我在玩弄:

(function($) { 
    // jQuery plugin definition 
    $.fn.reverseText = function(params) { 
     $.fn.reverseText.test(); 
     // merge default and user parameters 
     params = $.extend({ 
      minlength: 0, 
      maxlength: 99999 
     }, params); 
     // traverse all nodes 
     this.each(function() { 
      console.log($(this).parent().data('url')); 
      // express a single node as a jQuery object 
      var $t = $(this); 
      // find text 
      var origText = $t.text(), 
       newText = ''; 
      // text length within defined limits? 
      if (origText.length >= params.minlength && origText.length <= params.maxlength) { 
       // reverse text 
       for (var i = origText.length - 1; i >= 0; i--) newText += origText.substr(i, 1); 
       $t.text(newText); 
      } 
     }); 
     // allow jQuery chaining 
     return this.each; 

    }; 
    // Is this correct? 
    $.fn.reverseText.test = function() { 
    alert('test'); 
    }; 
})(jQuery); 


$(function() { 
    $(".js-test-whatever li:even").reverseText(); 
}); 

一般我會創建這樣一個命名空間:

var a = { 

    }; 

    a.reverseText = { 
     init: function() { 
     reverseText(); 
     }); 
    }, 

    reverse: function() { 
    $(function() { 
     return foo; 
     }); 
    } 

    a.reverseText.init(); 

那麼什麼是添加多個有道jQuery插件名稱空間中的函數?

看看第一個例子中的註釋,其中包含了一個附加函數。

回答

1

這是一個可接受的方式來做到這一點。另一種方式可能是這樣的:

(function($) { 
    var reverse = { 
     test: function() { 
      alert('test'); 
     }, 

     fn: function(params) { 
      reverse.test(); 

      /* the rest of your plugin code */ 
     } 
    } 

    // jQuery plugin definition 
    $.fn.reverseText = reverse.fn 
})(jQuery); 

沒有一個「正確」的方式。只要使用最適合您當前正在進行的項目的作品。

+0

酷感謝亞歷克:)我會嘗試這種方式,看看我喜歡它。 – 2012-01-29 06:25:25