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的主要内容,如果未能解决你的问题,请参考以下文章