d3.selectAll在v4中按类更改样式

时间:2016-08-10 20:06:04

标签: javascript css d3.js

我正在从d3 v3过渡到d3 v4。我查看了有关更改内容的文档,我知道样式和选择器现在的工作方式略有不同。我遇到了一个问题,找到了解决我需要做的事情的正确方法。

在第3版中,我可以这样做:

d3.selectAll(".myRectangle").style({'fill':'rgb(255,100,100)', 'stroke':'#000', 'stroke-width':'0.3'});

在我的代码底部,被绘制为“myRectangle”的所有内容都将获得指定的样式。

此外,如果动态添加了myRectangle类(例如使用鼠标悬停),它将充当占位符。

现在,相同的代码不仅不应用样式,如果不存在具有指定类的元素,则返回错误。

我无法找到一个如何正确实现这个目标的例子,这可能意味着我一直都做得不好。这里有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:7)

在d3.js第4版中,attrstyle只接受一个属性/值对作为参数:

d3.selectAll('.myRectangle').style('fill', 'rgb(255,100,100)')

为了传递具有多个值的对象,您必须使用attrsstyles代替attrstyle,并且还要包含https://d3js.org/d3-selection-multi.v0.4.min.js文件在你的网页上。

或者,您可以链接多个attr,每个属性一个。同意style

参考:d3-selection-multi

答案 1 :(得分:2)

另一篇文章是正确的,你一次只能将一个属性或样式设置为一个东西。但“style”是一个属性,它接受一个字符串!

d3.selectAll('.myRectangle').attr("style", "fill:rgb(255,100,100);stroke:#000;stroke-width:0.3;")