在jquery插件中创建一次元素
我以前写过很多jQuery插件,现在这个问题已经出现过好几次了。通常我只是在闭包外创建一个全局变量,并称之为一天。这一次,我试图找出正确的方法 这就是交易。我的基本插件设置如下:在jquery插件中创建一次元素,jquery,jquery-plugins,Jquery,Jquery Plugins,我以前写过很多jQuery插件,现在这个问题已经出现过好几次了。通常我只是在闭包外创建一个全局变量,并称之为一天。这一次,我试图找出正确的方法 这就是交易。我的基本插件设置如下: (function($) { $.fn.nameOfPlugin = function(options) { var defaults = { foo: 'foo' } var opts = $.extend(defaults, options); return t
(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'});
因为我使用一个类作为选择器,所以返回这个。每个类可以在任何地方运行1到50次。每个选择器只运行一次create方法的最佳方法是什么
我意识到在这种情况下,我可以简单地检查:
$('#plugin_overlay').length > 0
但我将在id的末尾添加一个时间戳,以便它根据选择器是唯一的
关于我能做什么,我还有一些想法,我只是想知道最好的方法是什么。我可能完全误解了这里的问题,但是如果你只想每个选择器调用一次方法,为什么不在每个选择器之前调用它呢
create();
return this.each(function(){
...
});
或者,您可以使用传递给each函数的index参数:
return this.each(function(i){
if(i==0) create();
...
});
我通常将其附加到元素的
.data()
,然后检查它。不确定这是否有任何负面影响,但这总是很容易的。在对象中添加一个变量,并存储由create生成的新对象(对于插件来说是全局的,而不是create函数本身)。然后,在需要时,重新引用该变量(或者在未初始化时创建)?[除非我有误解]@robert是的,我也这么做,只是没有把它包括在我的例子中。是的,我会试试看我有多笨。我把注意力集中在这个返回上。每个人都忘记了我实际上可以事先调用方法。第一个正是我想要的,谢谢