2011-11-08 69 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