代码之家  ›  专栏  ›  技术社区  ›  tcurdt

多功能jquery插件

  •  3
  • tcurdt  · 技术社区  · 14 年前

    根据开发人员文档,jquery插件应该只有一个名称空间,用于它们提供的所有函数。只要每个上下文只公开一个函数(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);
    

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

    $("elem").myplugin.start(options);
    $("elem").myplugin.stop();
    jQuery.myplugin.start(options);
    jQuery.myplugin.stop();
    
    3 回复  |  直到 13 年前
        1
  •  5
  •   dochoffiday    14 年前

    我用过arguments.calee之前:

    (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();
    
        2
  •  1
  •   Matti Virkkunen    14 年前

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

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

    我想不出一个简单的方法来使用您想要使用的语法,因为在中间有一个额外的属性将使 this 使用所选元素指向jquery对象之外的其他对象。就我个人而言,我发现使用一个字符串参数来完全改变函数做的事情也有点难看。 $(...).myplugin().function() 可能是可行的,但可能没有使用字符串参数那么有效。

        3
  •  0
  •   jackocnr    13 年前