jquery插件不止一次应用

时间:2013-07-10 12:50:04

标签: jquery jquery-plugins

我只是问自己,如果插件被多次应用于元素

会发生什么

假设我做$("#my_element").plugin();然后以某种方式做同样的事情$("#my_element").plugin();

  1. 最好避免这种情况?
  2. jQuery是否知道不能再次应用该插件?
  3. 如果这个问题不属于此,我很抱歉。告诉我,我会删除它。

1 个答案:

答案 0 :(得分:2)

这完全由插件编写者自行决定。 jQuery没有“真实”的方式来说“嘿,不要那样做!”但是,一个好的插件编写器通​​常会有一个“初始化”方法,可以将类或数据变量分配给调用插件的原始元素。类似的东西:

/*  Example Plug-in Setup   */
(function($) {
    if (!$.myExample) {
        $.extend({
            myExample: function(elm, command, args) {
                return elm.each(function(index){
                    //  here a check is made to see if this plugin has touched this element before
                    if (!$(this).hasClass('my-example')) {
                        $.myExample.init.apply($(this), arguments);
                    }
                    else {
                        // do work to each element as its passed through
                    }
                });
            }
        });
        $.fn.extend({
            myExample: function(command) {
                return $.myExample($(this), command, Array.prototype.slice.call(arguments, 1));
            }
        });
        $.myExample.init = function() {
            //  here we initialize the plugin on this element for the first time
            //  Assign element the class stating "hey, you've been here!"
            this.addClass('my-example');
        };
    }
})(jQuery);

请记住,这只是一个例子,根据不同的需求设计插件有很多不同的方法,但这应该让你有一个基础知识,即插件在“自我破坏”之前“检查自己”! / p>


<强> "Do you know what could happen if that check isn't present?"

嗯,这是一个“loaded question”。这真的取决于插件编写的“内容”。可能发生许多不同的事情。

例如,如果您编写了一个插件来克隆表单并在DOM上隐藏副本,那么每次在该表单上调用该插件时,都会将新副本保存到DOM中!如果目的是隐藏数据库上传的特定信息,这可能是可怕的。

然后,它可能只是一个重写元素的“内部”HTML的插件,因此只有在再次调用时才会被重写,并且可能看起来根本没有效果。

简单地说,无论发生什么都取决于插件编写器,但不要将插件视为“外来对象”。它们只是JavaScript,在这种情况下使用jQuery,包装在文件和/或插件方法中。这并不能帮助他们取代您在JavaScript代码中看到的任何内容。它只是意味着“扩展”一个库。因此,为您提供“预先编写”的代码,否则您需要自己编写。