一些我已经看到了开发jQuery插件教程和实例倾向于在实例化插件功能的最后返回为什么要在jQuery插件中返回this.each(function())?
this.each(function() {
//Plugin code here
});
,但我还没有看到它后面的任何理由,这似乎只是成为每个人都遵循的标准。任何人都可以启发我这种做法背后的推理吗?
编辑:澄清我的问题不是为什么要返回这个,而是为什么插件应该返回this.each。
一些我已经看到了开发jQuery插件教程和实例倾向于在实例化插件功能的最后返回为什么要在jQuery插件中返回this.each(function())?
this.each(function() {
//Plugin code here
});
,但我还没有看到它后面的任何理由,这似乎只是成为每个人都遵循的标准。任何人都可以启发我这种做法背后的推理吗?
编辑:澄清我的问题不是为什么要返回这个,而是为什么插件应该返回this.each。
使用选择器($('.myclass')
)过滤元素时,它可以匹配不止一个元素。
随着each
,你遍历所有匹配的元素和你的代码被应用到他们所有人。
当然!谢谢,我想我以前每次使用插件都认为这是理所当然的。 – 2010-04-20 20:07:49
尽管这是绝对正确的,但“返回”的实际原因是允许链接... – Leo 2010-04-20 20:08:25
@Mef:嗯,我认为这很清楚,而且更多的是为什么使用'each'。 – 2010-04-20 20:13:25
当您编写插件时,您将扩展jQuery对象,并且由于jQuery对象是一个序列,因此您会返回this.each(function() { });
以便为序列中的每个项目执行插件。
但你实际上只是返回“一个”“这个”对吗?每个部分是分开的,不是吗? – Hans 2012-01-06 21:50:42
@Marcel:是的,事实上,你可以调用'each',然后返回'this',作为两个单独的语句。它的作用是因为'each'也返回'this'。 – 2012-01-06 23:06:00
简而言之,它允许您利用链接,因为它返回到目前为止所做的所有事情,所以下一个.anyMethod()
可以对更改/修改的元素进行操作。
此外,看看这些链接,他们会给你很多关于jQuery插件开发的信息。
http://www.webresourcesdepot.com/jquery-plugin-development-10-tutorials-to-get-started/
http://www.learningjquery.com/2007/10/a-plugin-development-pattern
http://snook.ca/archives/javascript/jquery_plugin
在这里你有一个很好的基于Web的应用程序,可以帮助你跳开始你的jQuery插件。 http://starter.pixelgraphics.us/
让我给的代码,你两个 “相当于” 片,可以澄清你的问题:
使用jQuery “每个” 功能:
(function($) {
$.fn.mangle = function(options) {
return this.each(function() {
$(this).append(' - ' + $(this).data('x'));
});
};
})(jQuery);
没有jQuery的 “每个” 功能:
(function($) {
$.fn.mangle = function(options) {
var objs = this;
for (var i=0; i<objs.length; i++) {
var obj = objs[i];
$(obj).append(' - ' + $(obj).data('x'));
};
return this;
};
})(jQuery);
S O,基本上,each
函数用于一些代码适用于包含在this
对象(如this
通常是指一组由一个jQuery选择返回的元素)的所有元素和基准返回this
(为each
函数总是返回该参考-to允许链接calls-)
作为一个方面说明:第二种方法(- 比前一个(for
环 -)快(尤其是在旧的浏览器) - each
功能 -)。
这很奇怪。这似乎只是返回这个'这将是一个更好的主意.. – 2010-04-20 19:56:19
@Walt W - 我同意。我明白为什么我们会回来这个,因为这符合流畅接口的想法。但是我不明白的部分是每个电话。 – 2010-04-20 19:57:52
只是为了澄清,你写的功能是空白吗?或者那里有代码? – 2010-04-20 20:02:17