我正在从d3 v3过渡到d3 v4。我查看了有关更改内容的文档,我知道样式和选择器现在的工作方式略有不同。我遇到了一个问题,找到了解决我需要做的事情的正确方法。
在第3版中,我可以这样做:
d3.selectAll(".myRectangle").style({'fill':'rgb(255,100,100)', 'stroke':'#000', 'stroke-width':'0.3'});
在我的代码底部,被绘制为“myRectangle”的所有内容都将获得指定的样式。
此外,如果动态添加了myRectangle类(例如使用鼠标悬停),它将充当占位符。
现在,相同的代码不仅不应用样式,如果不存在具有指定类的元素,则返回错误。
我无法找到一个如何正确实现这个目标的例子,这可能意味着我一直都做得不好。这里有人能指出我正确的方向吗?
答案 0 :(得分:7)
在d3.js第4版中,attr
和style
只接受一个属性/值对作为参数:
d3.selectAll('.myRectangle').style('fill', 'rgb(255,100,100)')
为了传递具有多个值的对象,您必须使用attrs
和styles
代替attr
和style
,并且还要包含https://d3js.org/d3-selection-multi.v0.4.min.js文件在你的网页上。
或者,您可以链接多个attr
,每个属性一个。同意style
。
答案 1 :(得分:2)
另一篇文章是正确的,你一次只能将一个属性或样式设置为一个东西。但“style”是一个属性,它接受一个字符串!
d3.selectAll('.myRectangle').attr("style", "fill:rgb(255,100,100);stroke:#000;stroke-width:0.3;")