2014-03-12 30 views
3

我在有大量domConstuct.destroy()和domConstuct.place()的頁面上使用dijit/tooltips。因此,每次我從DOM中刪除一些節點時,我想刪除附加到這些節點的工具提示。目前,我的頁面上的工具提示窗口小部件數量不斷增加。Dojo - 銷燬DOM節點時的工具提示小部件

有沒有一種方法可以在刪除相應的DOM節點時自動刪除小部件,或者檢查現有的工具提示小部件的連接DOM節點是否仍然存在?

+0

你能告訴我你是如何實例化你的工具提示嗎?你使用'connectId'或'Tooltip.show(「...」,myNode)'(ad hoc)還是使用'selector'屬性? – g00glen00b

回答

3

您可以將一個工具提示窗口小部件同時附加到多個節點上,這可能是您的解決方案,因爲您不必再​​「管理」您的工具提示了。只有一個爲所有工具提示創建的工具提示小部件,因此您不必再摧毀它。

達到此目的的最佳方法是使用reference guide中所述的selector屬性。

new Tooltip({ 
    connectId: "myTable", 
    selector: "tr", 
    getContent: function(matchedNode){ 
     return matchedNode.getAttribute("tooltipText"); 
    } 
}); 

如果他們沒有共同的connectId和/或selector,那麼你仍然可以通過使用addTarget()功能將目標相同的提示實例使用單個工具提示。

要移除目標,您還可以使用接受DOM節點的removeTarget()(因此您只需傳遞要移除的DOM節點)。


如果這些方法都能夠幫助你,我想知道你是怎麼實例化你的提示,有多種方法可以做到這一點。例如,使用connectId或使用show()函數創建臨時工具提示。

+0

我正在爲每個connectId創建Tooltip的新實例,我甚至不知道選擇器屬性。我現在可以說,問題出在了Dojo文檔上(我經常發現這些文檔很混亂且沒有提供信息),但事實是,我沒有詳細閱讀關於這個問題的文檔。無論如何,非常好的答案,謝謝。 – Zemljoradnik

+0

不幸的是,我現在意識到我仍然有一個類似的問題,即使不是同樣的問題。工具提示的數量不會增長,但連接的數量將會增加。如果我摧毀了一個包含多個具有工具提示連接的節點的DOM節點,那麼我必須檢查每個後代節點是否與工具提示有連接,以便在銷燬DOM節點之前將其作爲目標移除。有任何想法嗎? – Zemljoradnik

3

我在Dimitri的回答幫助下找到了解決我的問題的方法。我不再爲每個工具提示創建單獨的Tooltip小部件,現在我使用它的.addTarget()方法將所有工具提示放在一個Tooltip中。解決方案的第二部分是遍歷Tooltip的connectId屬性並檢查DOM節點是否仍然存在。我不得不使用Javascript本地方法.contains()和.getElementById(),因爲Dojo的dom.byId()和query()給了我誤報。所以,我的代碼現在看起來像這樣:

// creating Tooltip 
var tooltips = new Tooltip({ 
    getContent: function(matchedNode){ 
     return matchedNode.getAttribute("tooltiptext"); 
    } 
}); 

// adding tooltips 
tooltips.addTarget(nameNode); 

// deleting sufficient connects 
for(var i = tooltips.connectId.length -1; i >= 0 ; i--){ 
    if(!document.contains(tooltips.connectId[i]) && !document.getElementById(tooltips.connectId[i])){ 
     tooltips.removeTarget(tooltips.connectId[i]); 
    } 
} 

的原因,我不得不同時使用。載有()和.getElementById()是一些節點我連着提示有ID和一些不這樣做,和Tooltip小部件將它們中的一些存儲爲字符串(id),另一些存儲爲DOM節點。

相關問題