jquery 插件 $.extend

Posted

技术标签:

【中文标题】jquery 插件 $.extend【英文标题】:jquery plugin $.extend 【发布时间】:2010-12-26 06:50:58 【问题描述】:

如果我扩展 jquery fn(比如 $.fn.extend) 我写我的插件:

(function($)
    $.fn.extend(
        functionName : function()
             //function returns
             return this.each(function()
                  $(this).append("<div>text</div>");
             );
        
    );
)(jQuery);

当我想扩展 jQuery 命名空间时,我会这样写:

(function($)
    $.extend(
        functionName : function()
             //function returns

        
    );
)(jQuery);

我不知道在这种情况下如何写'return'

【问题讨论】:

【参考方案1】:

更新

当您执行涉及多个选择器的多项操作时,您必须确定最有意义的操作。如果一个选择器是主要焦点,但也影响其他项目,则将其编写为插件,并像这样返回主要结果集:

$.fn.myAction = function(secondarySelector)
      return this.each(function()
          $(this).css('display', 'block');
          $(secondarySelector).hide();
      );
;

// Use:
// $(primarySelector).myAction(secondarySelector);
$("#id").myAction(".address"); // Chain continues after action

如果选择器的重要性相同,则只需创建一个不返回任何内容或根据成功返回 true / false 的函数。

另一种构造代码的方式:

extend 方法用于其他 OOP 框架,正如您所展示的,它也可以与 jQuery 一起使用。然而,你会发现,许多 jQuery 开发人员选择更短更明显的语法,如下所示:

(function($)

    // The if statement allows the file to be used with
    // other files that use the same shared namespace
    if(!$.Namespace)
        $.Namespace =  ;
    ;

    $.Namespace.Constructor = function( params )
       ... code ...
    ;

    // And for the wrapper sets ($.fn):
    $.fn.functionName = function(opts)
       return this.each(function()
          ... code ...
       );
    ;

)(jQuery);

【讨论】:

所以对于我想做的事情,我不再需要“return”关键字了吗?(比如 return this.each()) @kmunky 我添加了一个关于如何处理它的答案。它对您的特殊需求有意义吗? pff..很难说。我认为我的问题不是这个。我会提出一个新问题,感谢这篇精彩的帖子【参考方案2】:

你可以在第二个实例中返回任何你喜欢的东西。例如考虑$.each()$.get()。但是,如果我是你,我会避免将其用作函数命名空间——它会导致污染。相反,您应该保留它以在 jquery 命名空间下添加您自己的命名空间,例如:

(function($)
    $.extend(
        myNamspace : 
          functionName: function()
            // return whatever
          
        
    );
)(jQuery);

【讨论】:

好的,但我对'返回任何东西'很感兴趣;我该怎么写?如果我只想返回一行,如'return $(selector).append(...)',它的工作原理就像这样......但是如果我想返回多个'动作',如'$( selectorOne).appned(); $(selectorTwo).remove();' 然后返回一个数组、对象或 jquery 节点列表。但是返回什么取决于你希望你的函数返回什么。

以上是关于jquery 插件 $.extend的主要内容,如果未能解决你的问题,请参考以下文章

jquery.fn.extend与jquery.extend

扩展jQuery选择器类型

扩展 jquery $(this)

jquery插件库一般怎么使用。

如何调用jquery插件的方法

jquery 插件怎么使用?