你可以通过像foo.style({color:blah,background:blah})之类的东西在d3中设置样式吗?

use*_*489 6 d3.js

我将在svg元素上设置各种css样式,并且认为我可以做类似的事情

d3.selectAll(".whatever")
   .style(function(d) { return {"color":getColor(d), "background":getBackground(d)}});
Run Code Online (Sandbox Code Playgroud)

现在,这不起作用,但我想知道我是否可以做类似于集中设置整体样式属性而不是单独设置样式属性.

注意:正如Ray建议的那样,你可以做这样的事情(我假设你已经将数据附加到节点上):

d3.selectAll(".whatever")
  .attr("style",function(d) {
     return cssStyleStringYouWantToUse(d);
  });
Run Code Online (Sandbox Code Playgroud)

Lar*_*off 7

仅适用于D3 v3:
引用文档:

如果要一次设置多个样式属性,请使用如下对象文字:

selection.style({'stroke':'black','stroke-width':2})

但是这对功能来说是不可能的,所以在你的情况下你仍然需要使用"长形式".

  • 目前在v4中,这需要导入并且函数名称更改为复数形式,例如:`selection.styles({})`.见[d3-selection-multi](https://github.com/d3/d3-selection-multi#d3-selection-multi) (2认同)

Ray*_*din 6

您可以为样式文字中的每个样式名称指定一个单独的函数,如下所示:

d3.selectAll(".whatever").style({
    color: function(d) { return getColor(d); },
    background: function(d) { return getBackground(d); }
});
Run Code Online (Sandbox Code Playgroud)

  • 这有点像黑客,但你可以这样做:```selection.attr('style', function(d) {return ...;});``` (3认同)