Dojo - 销毁DOM节点时销毁工具提示窗口小部件

时间:2014-03-12 14:47:53

标签: javascript dojo

我在有很多domConstuct.destroy()和domConstuct.place()的页面上使用dijit / tooltips。因此,每次从DOM中删除一些节点时,我都想删除附加到这些节点的工具提示。目前,工具提示小部件的数量在我的页面上不断增长。

有没有办法在删除相应的DOM节点时自动删除窗口小部件,或检查现有的工具提示窗口小部件的连接DOM节点是否仍然存在?

2 个答案:

答案 0 :(得分:3)

您可以同时将单个工具提示小部件附加到多个节点,这可能是您的解决方案,因为您不必管理"那你的工具提示了。只为所有工具提示创建了一个工具提示小部件,因此您不必再销毁它。

实现此目标的最佳方法是使用reference guide中所述的selector属性。

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

如果他们没有共同的connectId和/或selector,那么您仍然可以通过使用{{3将目标添加到同一个工具提示实例来使用单个工具提示功能。

要删除目标,您还可以使用接受DOM节点的removeTarget()(因此您只需传递要删除的DOM节点)。


如果这些解决方案都无法帮助您,我想知道您如何实例化工具提示,那么有多种方法可以做到这一点。例如,使用connectId或使用show()函数创建临时工具提示。

答案 1 :(得分: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]);
    }
}

我必须同时使用.contains()和.getElementById()的原因是我附加工具提示的某些节点有id,有些则没有,而Tooltip小部件将其中一些存储为字符串(id)和一些作为DOM节点。