基本上,我正在使用现有的jQuery插件,我想在Jquery中使用2个实例。
所以这个html:
<div id="div_1"></div>
<div id="div_2"></div>
我能够做到这一点:
$('#div_1').myplugin();
$('#div_2').copy_of_myplugin();
现在myplugin正在由我从html文件顶部的外部源引入的脚本加载。
如果我console.log($());
我可以看到所有本机jQuery方法的列表以及插件脚本添加的方法。
基本上,经过一些研究后我认为这样的事情应该有效,但我无法确切地知道如何做到这一点。
$.fn.copy_of_my_plugin = function () {
return this.each(function () {
var instance = $(this);
if (instance.data('copy_of_my_plugin')) {
return;
}
var copy_of_my_plugin = new $.extend(true, {}, $.fn.myplugin);
instance.data('copy_of_my_plugin', copy_of_my_plugin);
});
};
我可以console.log($());
再次看到copy_of_my_plugin被添加到jquery,但看起来myplugin函数的内容实际上都没有被复制。
任何人都知道我做错了什么?
答案 0 :(得分:1)
很难弄清楚你在代码中想要做什么。您确实意识到您的变量“instance”实际上被设置为示例中的dom元素id =“div_2”。您是否尝试获取同一插件的2个实例,或者您只是尝试使用2个插件名称获得相同的功能?你确定你不只是想这样做吗?
$.fn.a_copy_of_my_plugin = $.fn.myplugin;
如果您使用代码,当您执行console.log()&amp;能够“看到你的插件” - 它实际上并不是任何东西的副本,它只是指向你在上面代码中分配给$ .fn.copy_of_my_plugin的函数的指针。只有你做$('#div_2')。copy_of_myplugin();然后运行该功能,尝试“创建第二个实例”,可以这么说。
如果你想立即运行该功能,你将替换};与}($);作为你最后一行代码。
由于你的代码代表this.each只在你使用$('#div_2')时运行.copy_of_myplugin();然后尝试在$('#div_2')的jQuery数据缓存中存储新对象的副本。
你可能想看看这个。我认为它应该在Best Way to Extend a jQuery Plugin
之后做你想做的事