请考虑以下代码。这里我有一个jquery插件myPlugin,我用它修改了#targetElement的ui
var myPluginVar = $('#targetElement').myPlugin();我创建了一个按钮,并在其上添加了一个单击事件侦听器
$('#myButton').click(function(){
// HERE I want reference of myPlugin back.
}现在,在按钮触发器上,我想要取回myPlugin对象。我不想使用myPluginVar。有没有办法使用插件的元素来获取myPlugin的引用?
发布于 2017-02-21 16:26:10
这取决于你如何编写你的插件。
下面是一个基本插件的例子:
(function($){
$.fn.myPlugin = function(){
return this.text('Iam is myPlugin');
};
}(jQuery));这个插件(目前)不能被引用,因为它没有把自己传递给任何东西。
但是如果把插件代码改成这样:
(function($){
$.myPlugin = function(el){
$(el).data('myPlugin', this);
return $(el).text('Iam is myPlugin');
};
$.fn.myPlugin = function(){
return new $.myPlugin(this);
};
}(jQuery));你可以用以下命令调用plugin self referenced:
$('#targetElement').data('myPlugin');当然,如果插件从未在#targetElement上初始化,它将以未定义的形式返回
但是如果你已经初始化了#targetElement,使用:
$('#targetElement').myPlugin();它将返回$.myPlugin对象
发布于 2017-02-21 22:38:42
如您所知,$.fn.myPlugin = function(){}将创建一个可以在如下元素上调用的插件:$("#example").myPlugin();。
$.myPlugin = function(){}将创建一个可以像这样静态调用的插件:$.myPlugin();。
因此,您所要做的就是在每次调用$.fn.myPlugin时设置$.myPlugin,这样它就会引用最后使用的元素。
$.fn.myPlugin = function(){
this.text("Hello, world!");
var t = this;
$.myPlugin = function() {
return t;
}
};
$("#test").myPlugin();
$("#button").click(function(){
$.myPlugin().text("something else");
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
</div>
<button id="button">Click Me</button>
https://stackoverflow.com/questions/42226024
复制相似问题