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

为什么在jQuery插件中返回这个.each(function()?,jquery,jquery-plugins,Jquery,Jquery Plugins,我看到的一些开发jQuery插件的教程和示例往往会返回 this.each(function () { //Plugin code here }); 在实例化插件的函数的末尾,我还没有看到它背后的任何原因,它似乎是每个人都遵循的标准。有人能告诉我这种做法背后的原因吗 编辑:为了澄清,我的问题不是为什么返回这个,而是为什么插件应该返回这个。每个。当您使用选择器($('.myclass')过滤元素时,它可以匹配多个元素。 使用each,您迭代所有匹配的元素,您的代码将应用于所有元素。当您编

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

this.each(function () {
    //Plugin code here
});
在实例化插件的函数的末尾,我还没有看到它背后的任何原因,它似乎是每个人都遵循的标准。有人能告诉我这种做法背后的原因吗


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

当您使用选择器(
$('.myclass')
过滤元素时,它可以匹配多个元素。

使用
each
,您迭代所有匹配的元素,您的代码将应用于所有元素。

当您编写插件时,您正在扩展jQuery对象,因为jQuery对象是一个序列,所以您返回
this.each(function(){})以便为序列中的每一项执行插件。

jQuery支持“可链接方法”,这意味着大多数jQuery函数应该返回
。返回
this
,如果您希望
$('selector').yourPlugin().css(…)
工作,您应该
返回此

简而言之,它允许您利用链接,因为它返回到现在为止所做的一切,以便下一个
.anyMethod()
可以对更改/修改的元素进行操作



另外,看看这些链接,它们将为您提供许多关于jQuery插件开发的信息




这里有一个很好的基于web的应用程序,可以帮助您快速启动jQuery插件。

让我向您展示两段可以澄清您的问题的“等效”代码:

使用jQuery“each”函数:

(function($) {
    $.fn.mangle = function(options) {
        return this.each(function() {
            $(this).append(' - ' + $(this).data('x'));
        });
    };
})(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);
不带jQuery“each”函数:

(function($) {
    $.fn.mangle = function(options) {
        return this.each(function() {
            $(this).append(' - ' + $(this).data('x'));
        });
    };
})(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);
(函数($){
$.fn.mangle=函数(选项){
var objs=这个;

对于(var i=0;这很奇怪。似乎只是返回
这个
会是一个更好的主意。@Walt W-我同意。我理解为什么我们会返回这个,因为这符合流畅接口的想法。但我不理解的部分是每个调用。只是澄清一下,函数在编写时是空白的吗?还是有code在那里?@Walt w-不,函数不是空的,我应该澄清一下。我会更新我的代码示例。当然!谢谢,我想我以前每次使用插件时都会想当然地认为这是理所当然的。虽然这是绝对正确的,但
返回
的实际原因是允许链接…@Mef:我认为这是清楚的,而且是正确的更多关于为什么要使用
each
。如果有代码要在此之后运行一次。each()循环,能否在循环后“返回此”并运行上一个代码?但实际上,您只返回“一”或“此”对吗?每个部分都是独立的,不是吗?@Marcel:是的,事实上你可以调用
每个
,然后返回
这个
,作为两个独立的语句。这是有效的,因为
每个
也返回
这个
。这是正确的答案。你返回的原因是允许链接性。