2011-09-08 24 views
9

我正在看一个jQuery插件,它有一个单一的功能。建立适当的默认值,虽然构造函数的参数函数定义了两个辅助函数,然后作为最后一部分返回调用this.each(),像这样经过:“return this.each()”在jQuery中做了什么?

return this.each(function() { 
//long method defined here 
}); 

我明白使用this.each()修改匹配的DOM元素等,但是return语句完成了什么?某种修改的DOM元素的数组,然后可以在其他调用中链接?

我已阅读关于this.each在这个网站,但我不能完全确定什么return在这里做。感谢您帮助解决这个问题。

回答

7

它允许一个叫上一堆元素的插件或事件,然后应用相同的功能或事件他们的所有

所以,如果你这样做:

$('.selector').myPlugin(); 

如果让我们说,.selector包含10个元素,所有10个元素将得到myPlugin所做的任何事情。


退货的原因是.each说法是因为不论它被赋予.each()回报,它可以让你把多个功能和插件在一起的一个jQuery的元素。

例如:

$('.selector').myPlugin().yourPlugin(); 
+0

感谢大家的答复。我想让我感到困惑的是在同一行上有'return'和this.each()。作为一个等价物,我可以调用this.each(...),然后在该函数调用结束时,在下一行写入'return this'? – larryq

+0

键入上面的内容后,我想我现在看看发生了什么。我必须将this.each(..)的结果保存到一个变量中,该变量将成为jQuery对象,并在方法结束时返回该变量。 this.each(...)上下文中的'this'引用我称之为函数的DOM元素。 – larryq

10

.each返回它被调用的元素,所以在这种情况下,可能会保持方法在该选择器上链接的能力。这意味着,如果该插件的方法被称为foo,你应该能够做到

$("mySelector").foo().show(); 

由于foo返回的.each的结果基本上是$("mySelector").

希望这是有道理的。

4

这使其能够保持对象链,所以你可以调用jQuery方法是这样的:

$("selector").css().mouseover().etc().blahblah(); 
2

它返回该方法如在docs表示被称为上jQuery对象。所以你可以调用返回值的另一种方法。

// without method chaining 
myobject.a() 
myobject.b() 
myobject.c() 

// with method chaining 
myobject.a().b().c(); 

method chainingfluent interface