Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jquery插件中创建一次元素_Jquery_Jquery Plugins - Fatal编程技术网

在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

我以前写过很多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'});
因为我使用一个类作为选择器,所以返回这个。每个类可以在任何地方运行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是的,我也这么做,只是没有把它包括在我的例子中。是的,我会试试看我有多笨。我把注意力集中在这个返回上。每个人都忘记了我实际上可以事先调用方法。第一个正是我想要的,谢谢