我只是问自己,如果插件被多次应用于元素
会发生什么假设我做$("#my_element").plugin();
然后以某种方式做同样的事情$("#my_element").plugin();
如果这个问题不属于此,我很抱歉。告诉我,我会删除它。
答案 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代码中看到的任何内容。它只是意味着“扩展”一个库。因此,为您提供“预先编写”的代码,否则您需要自己编写。