创建jQuery helper插件

时间:2011-02-05 19:10:39

标签: jquery jquery-plugins

如何编写jQuery帮助程序插件,以便我可以使用$.myPlugin()调用它,而不是$.fn.myPlugin()

使用以下方式创建的插件,您只能通过$("selector").myPlugin()$.fn.myPlugin()进行调用。

(function( $ ){
  $.fn.myPlugin = function() {
  };
})( jQuery );

,其中myPlugin()是一个不需要this引用的辅助函数。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

(function( $ ){

  $.myPlugin = function() {

      var HelperDate1 = function() { ... };
      var HelperDate2 = function() { ... };
      var HelperMath1 = function() { ... };


      return {
             method1: HelperDate1,
             method2: HelperDate2,
             method2: HelperMath1

         };

  }();

})(jQuery);

使用:

$.myPlugin.method1();
$.myPlugin.method2();

但是你不需要jQuery。

修改

var myHelper = (function($){

  var 
    pub = this,   //public
    pri = {};     //private


  // public method
  pub.HelperDate1 = function() {
        //...
  };

  pub.HelperDate2 = function() {
        //...
        pri._xFunctionPrivate2(); // can call private methods
  };

  pub.HelperMath1 = function() { 
        //... 
  };

  // public event method
  pub.InputEventClick = function(event) {
        //...
        // this is the element input, not the environment of the helper
        $(this).val("new value"); // example

  };

  // private method
  pri._xFunctionPrivate1 = function() { 
        //... 
  };

  pri._xFunctionPrivate2 = function() { 
        //... 
  };


  return public;

}).call({}, jQuery); //The first parameter is in context (this)

使用:

myHelper.HelperDate1();
myHelper.HelperDate2();
$("input").bind("click", myHelper.InputEventClick);
myHelper._xFunctionPrivate1() // ERROR _xFunctionPrivate1 is private

答案 1 :(得分:2)

@andres提供了定义jQuery插件的可能性之一,尽管通常使用$.extend功能来定义插件。

(function($) { // plugin closure

    var defaults = { ... };

    $.extend({
        myPlugin: function(options) { // when options are needed
            options = $.extend({}, defaults, options);
            // functionality afterwards
        }
    });
})(jQuery);