我正在使用d3 classed selection 和第一个参数,而不是String我想使用一个将返回类名的函数。
selection.classed(name[, value])
我知道我可以使用attr提到同样的here,但我希望能够使用分类来做同样的事情。我怎么能这样做?
答案 0 :(得分:31)
您提供的课程名称需要修复,即您不能拥有function(d) { return d; }
之类的内容。如果您需要由数据确定类名,则需要使用.attr("class", ...)
。
如果您担心覆盖现有的类名,请注意您可以按如下方式检索和添加这些名称。
.attr("class", function(d) { return d3.select(this).attr("class") + " " + d; })
答案 1 :(得分:4)
我遇到了类似的问题,如果我的数据上的属性为true,我想添加一个类,如果属性为false,我想添加另一个类:
selection.classed('class-one', function(d) { return d.property; })
.classed('class-two', function(d) { return d.property; });
如果要添加少量类,那么这样的事情可能值得考虑。
答案 2 :(得分:3)
与建议的答案类似,但我找到了
NotifyPropertyChanged
也有效。
答案 3 :(得分:2)
Lars答案很好,但是如果你开始没有属性的类,它会将类'null'添加到元素,因为null属性被强制为字符串。从他的自然下一步:
.attr("class", function(d) {
var existing = d3.select(this).attr("class")
if (existing == null){
return d.column.class
}else{
return existing + " " + d.column.class
}
})
如果你想要更简洁的话,可以用三元运算符制作一个单行