删除/重置DOM节点

时间:2011-09-30 16:10:03

标签: javascript dojo

我有一个Web应用程序,您可以在其中查看/浏览2D网络图。 当鼠标悬停在节点上时,会向服务器发送一个请求 - 服务器收集信息并将其发送回客户端 - 客户端将所有信息保存在JS类TooltipGraphListener中,如下所示:

var w = new scripts.widget.GraphInfo({ 
    baseURL: this._baseURL, 
    basePath: 'graphs/' + this._graphName, 
    path: 'nodes/' + nid, 
    tooltip: true });

var domNode = w.domNode;
dojo.removeClass(domNode, 'graphInfo');
domNode.setAttribute("id", nid);
this._canvas.containerNode.appendChild(domNode);
dojo.addClass(domNode, 'tooltip');
dojo.style(domNode,  "opacity", 0.8);
this._toolTips.push(w);

我现在的问题是,如果我在网络应用的小部件中生成一个新图表:

var tooltip = dojo.byId(id);
if (tooltip)...

仍然是真的,即使我清除_toolTips(_toolTips = [])或重新初始化整个类(listener = new TooltipGraphListener())..仍然可以通过dojo.byId(id)找到单个工具提示;

如何重置/删除所有这些工具提示domnodes?

2 个答案:

答案 0 :(得分:1)

GraphInfo类必须将工具提示元素附加到DOM。无论你班级发生了什么,你都必须将其删除,否则它将永远存在。 'byId'方法在DOM中查找具有该ID的元素。

如果你真的必须能够重置你必须在类中构建一个dispose()方法,那么它将删除它添加的DOM元素。或者你可以为每个实例重复使用相同的DOM元素,假设一次只能在页面上显示1个(因为它是工具提示,我认为就是这种情况)。

答案 1 :(得分:0)

当你清除你的工具提示时,你还必须从文档中删除他们的DOM节点(我确信有更多的dojo方式来做这个,但我没有使用该框架):

for (var i = 0; i < this._tooltips.length; i++) {
    this._canvas.containerNode.removeChild(this._tooltips[i].domNode);
}
this._tooltips = [];
相关问题