我看过一些开发jQuery插件的教程和示例,它们往往会返回:
this.each(function () {
//Plugin code here
});
在实例化插件的函数结尾处,我发现大家都遵循这个标准但并没有解释其原因。有人能告诉我这种做法背后的原理吗?编辑:为了澄清,我的问题不是为什么要返回this,而是为什么插件应该返回this.each。
我看过一些开发jQuery插件的教程和示例,它们往往会返回:
this.each(function () {
//Plugin code here
});
在实例化插件的函数结尾处,我发现大家都遵循这个标准但并没有解释其原因。有人能告诉我这种做法背后的原理吗?当您使用选择器($('.myclass')
)筛选元素时,它可能匹配不止一个元素。
使用 each
,您可以迭代所有匹配的元素并将代码应用于它们。
jQuery支持"链式方法",这意味着大多数 jQuery 函数应该返回this
。.each()
返回this
,如果你想让$('selector').yourPlugin().css(...)
工作,你应该return this
。
让我向您展示两个“等效”的代码片段,这可以澄清您的问题:
使用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
函数-)更快(特别是在旧版浏览器上)。
当您编写插件时,您正在扩展jQuery对象,因为jQuery对象是一个序列,所以您返回this.each(function () { });
,以便您的插件针对序列中的每个项目执行。
each
和 return this
作为两个不同的语句。这样做是有效的,因为 each
方法也会返回 this
。 - Max Toro.anyMethod()
可以作用于更改/修改的元素。
this
会是一个更好的选择。 - Walt W