2013-10-17 57 views
0

我有一種情況,我在頁面上的插件將被引用超過幾次。問題是將調用該插件的元素將被即時創建。然後刪除等等。jQuery插件實例並刪除/銷燬它們?

  1. 我有一個div結構,它創建了一些子元素。

i。我在這些孩子上添加插件實例。他們做了一些魔術等。

ii。用戶點擊一個按鈕,創建一組新的子元素 - 我創建插件實例。

現在 - 在上面的點「我」創建的人會發生什麼?我不使用「小部件」,所以我沒有銷燬方法。

所以,我可以只調用子元素,並通過它們循環,並銷燬數據元素等..阿拉。

$.each('[some_class_that_represents_all_elements]', function(a,b){ 
    $(b).data('PLUGIN_NAME') = null; // or 
    delete $(b).data('PLUGIN_NAME'); // or 
    $(b).data('PLUGIN_NAME', null); 
}) 

如果元素從DOM中刪除,插件實例是否也被刪除/清理?

+0

因此,js是引用計數正確,假設沒有任何處理您的插件將收集。我會在chrome調試工具中使用profiler(配置文件選項卡),看看有什麼。 – mconlin

+0

檢查插件API文檔,看它是否有'.destroy()'方法。例如,大多數jQuery UI小部件都是這樣做的。 – Barmar

回答

1

當您調用$(el).remove()方法時,jQuery默認將使用$(el).data()來清理存儲的任何數據。

如果使用$(el).detach(),數據將被保留。

http://api.jquery.com/jQuery.data/

jQuery的確保當DOM元素被除去 經由jQuery方法的數據被移除,並且當用戶離開網頁。

+0

我在這裏沒有使用數據,但我相信jquery會自動將插件引用存儲在數據對象中。當他們移除dom元素時,我希望他們離開。我想它會清理汽車,如果是這樣的話,不是嗎? –

+0

它非常依賴於「插件」。 「jquery插件」經常用作「添加到jQuery.prototype的方法」的同義詞。這種方法實際上做的是一個開放的問題,根本不需要用$(el).data()來做任何事情。 –

+1

是的,如果它們存儲在.data()中,它們將被自動清理。 –