我正在制作D3树形布局。我看了一遍,当你没有数据绑定到DOM并且你试图删除它时,似乎会出现此错误。我不仅确保那里有数据,而且还通过在修改之前和之后对链接数组进行计数来确保数据发生变化。
以下是我的更新功能中的问题代码。
link = linkElements.selectAll("path.link") //link elements is dom object that holds my links
.data(links).enter().append("path")
.attr("class", "link")
.attr("d", diagonal);
link.exit().remove();
它与许多例子几乎相同,但我一直看到这个:
TypeError: link.exit is not a function
link.exit().remove();
发生了什么事?我做了类似节点的事情。我无法从树上删除任何内容。
答案 0 :(得分:10)
请注意link
被分配到的内容:
link = linkElements.selectAll("path.link")
.data(links)
.enter() // <----- THIS
.append("path")
.attr("class", "link")
.attr("d", diagonal);
因此link
是包含enter()
子选择产生的新附加节点的选择,因此根据定义它没有exit()
子选择。
您需要(可能意味着)做的是将link
分配给整个数据绑定选择,然后然后处理子选择:
link = linkElements.selectAll("path.link")
.data(links);// link assigned
link.enter() // <----- THIS
.append("path")
.attr("class", "link")
.attr("d", diagonal);
link.exit().remove(); // no more errors!