我在有很多domConstuct.destroy()和domConstuct.place()的页面上使用dijit / tooltips。因此,每次从DOM中删除一些节点时,我都想删除附加到这些节点的工具提示。目前,工具提示小部件的数量在我的页面上不断增长。
有没有办法在删除相应的DOM节点时自动删除窗口小部件,或检查现有的工具提示窗口小部件的连接DOM节点是否仍然存在?
答案 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节点。