我过去写了很多jQuery插件,现在这个问题出现了几次。通常我只是在闭包之外创建一个全局变量并将其称为一天。这次我试图找出正确的做法是什么。
所以这是交易。我的基本插件设置如下:
(function($) {
$.fn.nameOfPlugin = function(options) {
var defaults = {
foo: 'foo'
}
var opts = $.extend(defaults, options);
return this.each(function(){
//if first time through call create
});
};
function create() {
//create stuff here only once
$('body').append("<div id='plugin_overlay'></div>");
};
})(jQuery);
显然我会像这样启动它:
$('.class').nameOfPlugin({foo:'bar'});
由于我使用类作为选择器返回this.each可以运行1到50次。每个选择器只运行一次create方法的最佳方法是什么?
我意识到在这种情况下我可以查看:
$('#plugin_overlay').length > 0
但我会在id的末尾添加一个时间戳,所以它基于选择器是唯一的。
我对我能做的事情有更多的想法,我只是想知道最好的方法是什么。
答案 0 :(得分:1)
我可能完全误解了这个问题,但是如果你只想在每个选择器上调用一次方法,为什么不在每个选择器之前调用它?
create();
return this.each(function(){
...
});
或者,您可以使用传递给每个函数的index参数:
return this.each(function(i){
if(i==0) create();
...
});