2013-11-29 62 views
1

所以我有一套jQuery插件,真正基本的東西,但我將代碼拆分爲插件,因爲我不喜歡有一個巨大的jQuery(document).ready()函數,整個應用程序邏輯。檢測「掛鉤」的DOM元素

每個插件都有一個「析構函數」,它基本上是我在插件原型對象中定義的函數。這個函數解除綁定插件使用的事件,刪除

插件初始化這樣的插件等添加的DOM元素:

$('.element').plugin(); 

有沒有什麼辦法可以讓所有具備的要素我插件附加到他們,從另一個插件應該取代主體的HTML,所以我可以調用析構函數?

我正在考慮將每個插件實例存儲在全局數組中,然後我可以從任何插件訪問該數組。但是,也許有更好的方法不使用全局狀態?

+0

當我建我使用[我寫自定義模板(jQuery的小部件https://github.com/zzzzBov/jQuery-widget .tmpl.js /斑點/主/ jqwt/jQuery的widget.tmpl.js)。它包括擴展'$ .expr [':']',以便可以選擇實例化的小部件。 – zzzzBov

回答

1

我不認爲有一個現成的方法...但作爲一個黑客,你可以添加一個類到你的插件中的目標元素,然後使用該類來獲取所有元素與小部件初始化lke

$.fn.plugin = function(){ 
    this.addClass('my-plugin-class'); 
} 

然後初始化

$(element).plugin() 

讓所有元素與插件

$('.my-plugin-class').... 

但是,如果它是一個jQuery UI控件,那麼你可以使用選擇$(':ui-widgetname'),看到this answer

+0

這實際上是一個好主意,然後我可以選擇和銷燬掛在頁面某個區域的元素上的插件,如'#main .plugin' – Alex

1

Arun P Johny寫的分辯想法 - 只是標記與一些特定的類名受影響的DOM元素刪除你的工作的「足跡」。

我想要添加一個想法。插件是庫的方法,僅此而已。如果您需要the destroyerconstructor - 只是讓另一個插件吧:

$.fn.overture = function(){...};// construct 
$.fn.crescendo = function(){...};// more construct 
$.fn.quietFarewell = function(){...};// destructor for everything above 

$(...).overture().crescendo().quietFarewell();