2010-04-20 30 views
67

一些我已经看到了开发jQuery插件教程和实例倾向于在实例化插件功能的最后返回为什么要在jQuery插件中返回this.each(function())?

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

,但我还没有看到它后面的任何理由,这似乎只是成为每个人都遵循的标准。任何人都可以启发我这种做法背后的推理吗?

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

+0

这很奇怪。这似乎只是返回这个'这将是一个更好的主意.. – 2010-04-20 19:56:19

+0

@Walt W - 我同意。我明白为什么我们会回来这个,因为这符合流畅接口的想法。但是我不明白的部分是每个电话。 – 2010-04-20 19:57:52

+0

只是为了澄清,你写的功能是空白吗?或者那里有代码? – 2010-04-20 20:02:17

回答

70

使用选择器($('.myclass'))过滤元素时,它可以匹配不止一个元素。
随着each,你遍历所有匹配的元素和你的代码被应用到他们所有人。

+1

当然!谢谢,我想我以前每次使用插件都认为这是理所当然的。 – 2010-04-20 20:07:49

+12

尽管这是绝对正确的,但“返回”的实际原因是允许链接... – Leo 2010-04-20 20:08:25

+3

@Mef:嗯,我认为这很清楚,而且更多的是为什么使用'each'。 – 2010-04-20 20:13:25

7

当您编写插件时,您将扩展jQuery对象,并且由于jQuery对象是一个序列,因此您会返回this.each(function() { });以便为序列中的每个项目执行插件。

+1

但你实际上只是返回“一个”“这个”对吗?每个部分是分开的,不是吗? – Hans 2012-01-06 21:50:42

+3

@Marcel:是的,事实上,你可以调用'each',然后返回'this',作为两个单独的语句。它的作用是因为'each'也返回'this'。 – 2012-01-06 23:06:00

21

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

+6

这是正确的答案。您返回的原因是为了实现可链接性。 – Undefined 2013-03-20 09:26:37

4

简而言之,它允许您利用链接,因为它返回到目前为止所做的所有事情,所以下一个.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/

7

让我给的代码,你两个 “相当于” 片,可以澄清你的问题:

使用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选择返回的元素)的所有元素和基准返回thiseach函数总是返回该参考-to允许链接calls-

作为一个方面说明:第二种方法(- 比前一个(for环 -)快(尤其是在旧的浏览器) - each功能 -)。

相关问题