如何使用d3分类选择将名称作为函数

时间:2013-07-03 15:45:44

标签: javascript d3.js

我正在使用d3 classed selection 和第一个参数,而不是String我想使用一个将返回类名的函数。

selection.classed(name[, value])

我知道我可以使用attr提到同样的here,但我希望能够使用分类来做同样的事情。我怎么能这样做?

4 个答案:

答案 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
      }
})

如果你想要更简洁的话,可以用三元运算符制作一个单行