在jquery插件中创建一次元素

时间:2011-06-27 15:58:43

标签: jquery jquery-plugins

我过去写了很多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的末尾添加一个时间戳,所以它基于选择器是唯一的。

我对我能做的事情有更多的想法,我只是想知道最好的方法是什么。

1 个答案:

答案 0 :(得分:1)

我可能完全误解了这个问题,但是如果你只想在每个选择器上调用一次方法,为什么不在每个选择器之前调用它?

create();

return this.each(function(){
   ...
});

或者,您可以使用传递给每个函数的index参数:

return this.each(function(i){
   if(i==0) create();
   ...
});