Javascript jQueryPlugin:返回这个vs返回这个.each()
是的,有很多关于这个的话题,但我还是不明白 我准备了两个JSFIDLE: 有什么区别? 有很多答案,但我的示例显示了相同的结果。所以其中一些答案可能是错误的Javascript jQueryPlugin:返回这个vs返回这个.each(),javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,是的,有很多关于这个的话题,但我还是不明白 我准备了两个JSFIDLE: 有什么区别? 有很多答案,但我的示例显示了相同的结果。所以其中一些答案可能是错误的 “它允许一个人在一堆元素上调用插件或事件,然后将相同的函数或事件应用于所有元素”-->work's with也返回此 “它允许您链接多个函数”-->此处相同 “允许您执行以下操作:$(“mySelector”).foo().show();”-->当我使用返回此值时,我仍然可以执行此操作。” 我还创建了另一个JSFIDLE,它表明—
“它允许一个人在一堆元素上调用插件或事件,然后将相同的函数或事件应用于所有元素”-->work's with
也返回此
“它允许您链接多个函数”-->此处相同
“允许您执行以下操作:$(“mySelector”).foo().show();
”-->当我使用返回此值时,我仍然可以执行此操作。”
我还创建了另一个JSFIDLE,它表明——在我看来——将代码包装到中并返回this.each()并不重要代码>:
Chrome控制台显示相同的输出
那么有什么不同呢?它们都完全一样.each()
返回此
,因此返回此。each()
与此.each()完全相同代码>返回此代码>
编辑:你最新的小提琴的makeRed
方法不会返回this
,因此无法链接。两件事:
您的示例有缺陷,因为它们对每个元素的作用完全相同
真正的问题不是返回这个
与返回这个。每个
,问题是这个
与这个。每个
对于<强>(1)< /强>,考虑此插件之间的差异:
(function($) {
$.fn.mangle = function(options) {
this.append(' - ' + this.data('x'));
return this;
};
})(jQuery);
(function($) {
$.fn.mangle = function(options) {
return this.each(function() {
$(this).append(' - ' + $(this).data('x'));
});
};
})(jQuery);
演示:
这个插件:
(function($) {
$.fn.mangle = function(options) {
this.append(' - ' + this.data('x'));
return this;
};
})(jQuery);
(function($) {
$.fn.mangle = function(options) {
return this.each(function() {
$(this).append(' - ' + $(this).data('x'));
});
};
})(jQuery);
演示:
因此,如果需要对this
集中的各个元素进行不同的处理,则需要使用this.each
。如果你的插件必须将特定于元素的数据附加到每个元素上,你会有类似的效果:如果你没有使用每个
,那么你最终会将完全相同的数据附加到这个
中的所有元素上,这只会让你对信息为什么到处泛滥感到困惑
对于(2),无论您是返回此还是返回此,都没有关系。每个(…
)都会返回x
。让我向您展示两段可以澄清您的问题的“等效”代码:
使用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;iyop,改变了它,第三把小提琴只是为了检查它是否相等,所以互联网上大约有上千个教程,讲了一些错误的东西??有点。返回值是一样的,但总体行为可能完全不同,这取决于插件的功能。案例很简单,如果你想要一个特定于节点的过滤器……try logging$(this).text()
在没有的一个中,每个谢谢,这正是我想要的:)