具有多种function的jquery插件

根据开发人员文档,jquery插件应该只有一个命名空间用于它们提供的所有function。 只要您只为每个上下文公开一个函数(static / element),这是直截了当的。

(function($){ var state_a = 0, $.myplugin = function(in_options) { // static return this; } $.fn.myplugin = function(in_options) { // element return this; } })(jQuery); 

这使得这样的调用成为可能:

 $("elem").myplugin(options); jQuery.myplugin(options); 

如果您有多个function并且需要共享状态,那么最佳方法是什么? 我想像这样调用我的插件:

 $("elem").myplugin.start(options); $("elem").myplugin.stop(); jQuery.myplugin.start(options); jQuery.myplugin.stop(); 

我之前使用过arguments.callee:

 (function ($) { $.fn.pagination = function (options) { var defaults = { }; options = $.extend(defaults, options); var object = $(this); arguments.callee.updatePaging = function () { //do stuff }; }); 

然后,在您的页面上:

  var pagination = $("#pagination"); pagination.pagination(); pagination.pagination.updatePaging(); 

jQuery插件倾向于为不同的函数使用字符串参数:

 $(...).myplugin('start', options); $(...).myplugin('stop'); 

我想不出一种使用你想要使用的语法的简单方法,因为在中间有一个额外的属性会使this一点与具有所选元素的jQuery对象不同。 就个人而言,我发现使用字符串参数来完全改变函数的function有点难看。 $(...).myplugin().function()是可行的,但可能不如使用该字符串参数那样有效。

这在文档中有很好的解释: http : //docs.jquery.com/Plugins/Authoring#Namespacing