如何更新D3中的特定节点

时间:2014-09-01 15:43:11

标签: d3.js

我正在更新节点和链接。我还想更改现有节点(圆圈)的半径。我如何更新例如特定的圈子?

  • 当我在下面执行此操作时,它会更新所有圈子。

    node.select("circle").attr("r", circleradius); 
    
  • 当我更新节点阵列时,没有任何变化。

    nodes[index].size = 2000;
    

this is how the outputted html looks like

这是功能更新代码:

    function update() {


        // Restart the force layout.
        force
            .nodes(nodes)
            .links(links)
            .start();


        // Update links.
        link = link.data(links, function(d) { return d.target.id; });

        link.exit().remove();

        link.enter().insert("line", ".node")
            .attr("class", "link");

        // Update nodes.
        node = node.data(nodes, function(d) { return d.id; });

        node.exit().remove();

        var nodeEnter = node.enter().append("g")
            .attr("class", "node")
            .on("click", click)
            .call(force.drag); 

        nodeEnter.append("circle")
                .attr("r", function(d) {   return Math.sqrt(d.size) / 2 || 24.5; });

        nodeEnter.append("text")
                      .attr("dy", ".35em")
                      .text(function(d) { return d.name; });

        node.select("circle")
            .style("fill", color);

    }

1 个答案:

答案 0 :(得分:0)

在使用d3.select之前,子元素不会自动更新。包裹你的头是一件很难的事,我不会进入这里。

但是出于实际目的,您需要做的是,在创建了力导向布局和元素之后,如果要更改用于size元素0的数据值并查看它更新,则代码需要像这样阅读:

 nodes[0].size = 2000;
 d3.selectAll("g").select("circle")
  .attr("r", function(d) {   return Math.sqrt(d.size) / 2 || 24.5; });