我有一个适用于少数元素的插件。有没有办法存储和检索JQuery插件对象,以便我们可以运行该对象的方法。示例示例如下:
$('#li1').myPlugin(); // apply plugin object to different li
$('#li2').myPlugin(); // apply plugin object to different li
$('#li3').myPlugin(); // apply plugin object to different li
现在我想从其他外部元素上的用户活动中检索对象,以运行插件的某些方法。像
var idx = 2
$('body').click(function(){ $('li').eq(2).highLight(); })
由于highLight
是myPlugin
的公共方法,但不是li,因此它不会执行。
我可以将myPlugin对象设置为元素的属性(但不是字符串),或者我可以在插件初始化中执行此操作,
$(this)[0].obj = this; // sounds weird.
除了创建全局关联数组以存储具有元素Id作为键的对象之外,还有什么其他选项。在我的情况下这是不可能的,因为我的插件元素可能有也可能没有Id。
修改
这是示例插件,实际上太大了,不能在这里发布。目标是通过外部活动识别与元素相关联的插件。示例示例使用body.click
但假设我们无法在插件中实现click。实际上,事件可以是插件未知的任何外部自定义事件。我希望我很清楚。
(function ($) {
$.fn.myPlugin = function (){
var ele = this;
// elr.get(0).extension = this; // can I do this, cross browser?
// so that later i can call it as
// $('li').eq(1).get(0).extension.highLight()
this.highLight = function(){
ele.css('color','red');
}
this.blueIt = function(){
ele.css('color','blue');
}
this.blueIt();
}
})(jQuery);
答案 0 :(得分:1)
两个主要的替代方法是使用.data()
jQuery方法存储对所需内容的引用,或使用$(sel).pluginName("aMethod", anyData)
的约定。
我从未成为后者的忠实粉丝,但这很常见。