D3.js:为特定的FDG节点将一个属性的值传递给另一个属性?

时间:2013-07-10 17:36:53

标签: d3.js force-layout

我正在使用强制导向图,将圆圈附加到每个节点。

作为节点创建的一部分,我首先将每个节点圆的半径“r”设置为默认且一致的值(defaultNodeSize = 10)。这成功地绘制了一个所有相关节点大小相同的集群。

    // Append circles to Nodes
    node.append("circle")
        .attr("x", function(d) { return d.x; })
        .attr("y", function(d) { return d.y; })
        .attr("r", function(d) { if (d.id==focalNodeID) { return centerNodeSize; } else { return defaultNodeSize; } } ) // <---------------------------- Radius "r" set HERE!!!!
        .style("fill", "White") // Make the nodes hollow looking
        .attr("type_value", function(d, i) { return d.type; })
        .attr("color_value", function(d, i) { return color_hash[d.type]; })
        .attr("rSize", function(d, i) { return d.rSize; }) // <------------------ rSize HERE!!!!
        .attr("id", "NODE" )
        .attr("class", function(d, i) {
          var str = d.type;
          var strippedString = str.replace(/ /g, "_")
          //return "nodeCircle-" + strippedString; })
          if (d.id==focalNodeID) { return "focalNodeCircle"; }
          else { return "nodeCircle-" + strippedString; }
        })
        .style("stroke-width", 5) // Give the node strokes some thickness
        .style("stroke", function(d, i) { return color_hash[d.type]; } ) // Node stroke colors
        .call(force.drag);

此外,在创建时,我设置了一个名为“rSize”的属性,它指定节点的绝对大小。每个节点都有不同的rSize,rSize与defaultNodeSize不同。 rSize的目的是让我可以稍后访问它,并动态地将圆的半径从它的defaultNodeSize更改为它的rSize(或反向),允许每个节点根据控制器进行扩展或收缩。

在单独的控制器功能中,我稍后选择我想要应用新rSize的所有节点。选择它们很容易......

var selectedNodeCircles = d3.selectAll("#NODE");

但是,我不知道读取每个节点的rSize的语法是什么,并将rSize应用于正在更改的特定节点。我认为这就像......

selectedNodeCircles.("r", function(){ return this.attr("rSize"); });

换句话说,我想检索特定节点的“rSize”属性值,并将属性“r”设置为从“rSize”中检索的值。

知道正确的语法是做什么的吗?

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

您正在寻找getAttribute()功能。

所以这样的事情对你有用:

selectedNodeCircles.attr("r", function() {return this.getAttribute("rSize")})

请记住,函数中的this是圈子本身,因此只是DOM中的一个元素,据我所知。

您只需在console.log(this)声明之前使用result打印出来即可确认。

希望这有帮助。