我有这个:
g.append(function(d) {
return document.createElementNS("http://www.w3.org/2000/svg", d.shape);
})
d.shape
可以是circle
或polygon
。现在根据形状,我想添加一个属性。对于圈子:
.attr('r', 12)
对于polygon:
.attr('points', '05,30 15,10 25,30'))
但我不知道如何添加此变量对属性名称/值。可能吗?相关的jsbin是here。
答案 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”属性分配给非圆形元素时,我认为这不会产生问题(等等,对于圆圈上的“点”等)