0

我有这个:

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

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

.attr('r', 12)

对于多边形:

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

但我不知道如何添加这个变量对属性名称/值。可能吗?一个相关的 jsbin 在这里

4

1 回答 1

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 }
});

我不是很肯定,但我认为当它尝试将 undefined 的“r”属性分配给非圆形元素时(对于圆形上的“点”等),这不会出现问题。

于 2013-08-23T13:54:13.153 回答