为什么在 jQuery 插件中返回 this. each (function()) ?

我看到的一些开发 jQuery 插件的教程和示例往往会返回

this.each(function () {
//Plugin code here
});

在实例化插件的函数的末尾,但我还没有看到它背后的任何推理,它似乎只是一个每个人都遵循的标准。有人能告诉我这种做法背后的原因吗?

编辑: 为了澄清,我的问题不是为什么返回这个,而是为什么插件应该返回 this. each。

32555 次浏览

当使用选择器($('.myclass'))筛选元素时,它可以匹配多个元素。
使用 each,可以遍历 所有匹配的元素,并将代码应用于所有 所有匹配的元素

当你编写一个插件的时候,你是在扩展 jQuery 对象,因为 jQuery 对象是一个序列,所以你返回 this.each(function () { });,这样你的插件就会针对序列中的每个项目执行。

JQuery 支持“链式方法”,这意味着 大部分 jQuery 函数应该返回 this.each()返回 this,如果你想让 $('selector').yourPlugin().css(...)工作,你应该返回 return this

简而言之,它允许您利用链接,因为它返回到目前为止已经完成的所有操作,这样下一个 .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

这里你有一个很好的基于网络的应用程序,可以帮助你快速启动你的 jQuery 插件。 Http://starter.pixelgraphics.us/

让我向您展示两段“相当”的代码,它们可以澄清您的问题:

使用 jQuery 的“ each”函数:

(function($) {
$.fn.mangle = function(options) {
return this.each(function() {
$(this).append(' - ' + $(this).data('x'));
});
};
})(jQuery);

没有 jQuery 的“ each”函数:

(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);

因此,基本上,each函数用于将一些代码应用于包含在 this对象(因为 this通常引用 jQuery 选择器返回的一组元素)中的所有元素,并返回对 this(因为 each函数总是返回该引用-以允许链接调用-)的引用

作为附注 : 第二种方法(- for循环-)比第一种方法(- each功能-)更快(特别是在旧的浏览器上)。