2011-11-08 41 views
0

我有一个应用于少数元素的插件。有什么方法可以存储和检索JQuery插件对象,以便我们可以运行该对象的方法。样品的例子是:从html元素中识别插件

$('#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(); }) 

由于highLightmyPlugin但不是李公共方法,所以它不会执行。 我可以设置为myplugin对象属性的元素(但它不是字符串)或我可以做插件初始化内这种方式,

$(this)[0].obj = this; // sounds weird. 

什么是比创建全球关联数组存储的对象与元素之外的另一种选择Id为关键。这在我的情况下是不可能的,因为我的插件元素可能有也可能没有ID。

编辑

这是样品插件,实际是太大了,在这里发表。目标是通过外部活动来识别与元素相关联的插件。示例示例使用body.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); 
+1

也许你可以显示一些你的插件 - 也许方法定义 – ManseUK

+0

@ManseUK更新后,澄清问题 – hungryMind

回答

1

的两个主要备选方案是使用jQuery的.data()方法来存储到任何你需要的引用,或使用$(sel).pluginName("aMethod", anyData)的惯例。

我从来不是后者的巨大粉丝,但它很常见。

+0

我看不到pluginName工作(版本:1.4.4),但数据()工作正常。谢谢。 – hungryMind

+0

@hungryMind ...这是* your *插件名称的占位符,或任何其他使用该技术的插件;像[jQuery UI自动完成](http://jqueryui.com/demos/autocomplete/),请参阅“方法”选项卡。 –

+0

好的,我想念。 – hungryMind