D3: 不能 select 基于其 id 的项目

D3: Cannot select an item based on its id

我想在我的屏幕上可视化一堆圆圈并使它们可以拖动。 我正在为每个圈子分配一个唯一的 ID。后来我试图通过 on("dragend", ..) 事件中的 id select 一个特定的圈子,但我收到以下错误:

语法错误:指定了无效或非法的字符串1 d3.js:549:0

    var drag = d3.behavior.drag()
        .on("drag", function(d,i) {
            d3.select(this).attr("cx", d3.event.x)
            d3.select(this).attr("cy", d3.event.y) 
         })

        .on("dragend",function(d,i){    
            var previous= d3.select("#3")  // Here I am getting Error
            console.log(previous);
         });

var circle = svg.selectAll('circle')
    .data(csv)
    .enter()
    .append("circle")
    .attr("stroke", "black")
    .attr("id",function(d,i){return i;})
    .attr("fill", function(d) {return color(d.Cyl);})
    .attr("cx", function(d) { return xScale(d.Weight); })
    .attr("cy", function(d) { return yScale(d.DealerCost); })
    .attr("r", function(d) { return d.EngineSize+2; })
     .call(drag);

我该如何解决这个问题?

问题正是您在错误消息中遇到的问题 -- 您不能以数字开头 ID。要修复,只需前缀:

.attr("id",function(d,i){return "id_" + i;})

.on("dragend",function(d,i){    
        var previous= d3.select("#id_" + (i-1))  // Here I am getting Error
        console.log(previous);
     });

CSS specification 定义了有效的标识符。