Javascript D3js路径更新进入和退出

Javascript D3js路径更新进入和退出,javascript,d3.js,svg,Javascript,D3.js,Svg,我错过了什么? 我允许用户删除和绘制自己的数据点。我的直线路径就是用这个画的,效果很好 let self = this; let line = D3['line']() .x(function (d) { return self.getColX(d.x); }) .y(function (d) { return self.getRowY(d.y); }); this.group = this.canvas.appe

我错过了什么?
我允许用户删除和绘制自己的数据点。我的直线路径就是用这个画的,效果很好

 let self = this;
        let line = D3['line']()
            .x(function (d) { return self.getColX(d.x); })
            .y(function (d) { return self.getRowY(d.y); });
        this.group = this.canvas.append("g")
            .attr("transform", "translate(25,25)");

        //bind the data
        this.group.selectAll("path")
            .data(this.data[this.site].drawLine)
            .enter()
            .append("path")
            .attr("d", line)
            .attr("fill", "none")
            .attr("stroke", "black");

        this.group.selectAll('path').exit().remove()
我的问题是,如果我弹出最后一个坐标并添加一个新的坐标,调用draw函数,新的点被正确添加,但旧的点不会被删除

例如:我的行从(x,y):(1,3)到(3,6)到(7,8),如果我移除(7,8)并将其替换为5,6。我将看到一个从(3,6)到(5,6)的新行,但是从(3,6)到(7,8)的行不再在数据数组中

D3将您的选择与提供的数据进行比较后,将创建
enter()
exit()
选择。因此,在回复这些电话时可以使用:

this.group.selectAll("path")
            .data(this.data[this.site].drawLine)
这就是添加新数据的原因,
enter()
工作正常

使用
this.group.selectAll('path').exit().remove()
可以创建新的选择,但不会将选择与任何数据进行比较,因此
enter()
exit()
选择不可用

长话短说,只需将
.exit().remove()
应用到您的初始选择中,它就会起作用。大概是这样的:

    let update = this.group.selectAll("path")
        .data(this.data[this.site].drawLine)

    update.enter()
        .append("path")
        .attr("d", line)
        .attr("fill", "none")
        .attr("stroke", "black")

    update.exit()
        .remove()

这对你有帮助吗?您的回答进行得很顺利,但随后您突然将
exit()
链接到“输入”选项。“你认为这有用吗?”杰拉尔多福塔多·沃西·戴西,谢谢你的头up@GeradoFutado,我是否用;?打破股票和退出之间的转换;?这就是你的意思吗?@chungtinhlakho不,在编辑答案之前,我只是在处理前面的代码。现在答案是肯定的。