Javascript 向选择添加动态属性名称
我有这个:Javascript 向选择添加动态属性名称,javascript,d3.js,Javascript,D3.js,我有这个: g.append(function(d) { return document.createElementNS("http://www.w3.org/2000/svg", d.shape); }) 其中d.shape可以是圆或多边形。现在,根据形状,我想添加一个属性。对于圆形: .attr('r', 12) 对于多边形: .attr('points', '05,30 15,10 25,30')) 但是我不知道如何添加这个变量对属性名称/值。可能吗?一个相关的jsbin是。我会
g.append(function(d) {
return document.createElementNS("http://www.w3.org/2000/svg", d.shape);
})
其中d.shape
可以是圆
或多边形
。现在,根据形状,我想添加一个属性。对于圆形:
.attr('r', 12)
对于多边形:
.attr('points', '05,30 15,10 25,30'))
但是我不知道如何添加这个变量对属性名称/值。可能吗?一个相关的jsbin是。我会为此使用一个选择过滤器,对元素的nodeName属性进行过滤:
d3.selectAll("top_level_selector") //or use existing selection from appending
.filter(function(d,i){
return this.nodeName == 'circle';
})
.attr("r", 12);
-
或者可能只是在属性函数中检查正确的节点类型:
selection
.attr('r',function(d,i){
if(this.nodeName =='circle'){ return 12 }
});
我不是肯定的,但我认为当它试图将未定义的“r”属性分配给非圆元素(以及圆上的“点”等)时,这不会出现问题。您可以简单地添加所有属性,并在不适用的情况下将其保留为空。