我正在制作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();
这是怎么回事?我对节点做了类似的事情。我无法从树中删除任何内容。
请注意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!