将动态属性名称添加到选择中

时间:2013-08-23 13:16:13

标签: javascript d3.js

我有这个:

g.append(function(d) {
  return document.createElementNS("http://www.w3.org/2000/svg", d.shape);
})

d.shape可以是circlepolygon。现在根据形状,我想添加一个属性。对于圈子:

.attr('r', 12)

对于polygon:

.attr('points', '05,30 15,10 25,30'))

但我不知道如何添加此变量对属性名称/值。可能吗?相关的jsbin是here

1 个答案:

答案 0 :(得分:1)

我要为此使用选择过滤器,过滤元素的nodeName属性:

d3.selectAll("top_level_selector") //or use existing selection from appending
.filter(function(d,i){
    return this.nodeName == 'circle';
})
.attr("r", 12);

- https://github.com/mbostock/d3/wiki/Selections#wiki-filter

或者只是在属性函数内部检查正确的nodetype:

selection
.attr('r',function(d,i){
    if(this.nodeName =='circle'){ return 12 }
});

我不是肯定的,但是当我试图将未定义的“r”属性分配给非圆形元素时,我认为这不会产生问题(等等,对于圆圈上的“点”等)