这是JSFiddle。 当定义起始位置和垂直边距并使用数组中的数据时,我想要一个整齐的svg矩形堆栈。 在JSfiddle中,对输出容器进行了手动编码以演示所需的结果。如何使用d3获取它?我尝试了以下方法。 var输入= [{{text“:” inleaf1“,” col“:”红色“},{” text“:” inleaf2“,” col“:” blue“},{” text“:” inleaf3“,” col“:” green“}]; var elementwidth = 120; var elementheight = 50; var inputstartx = 20; var inputstarty = 20; //////////// y应该为每个矩形更改 var verticalmargin = 20; var canvas = d3.select(“。canvas”); var inputcontainer = d3.select(“#input-container”); var inputleaf = inputcontainer .data(输入) .enter()。append(“ rect”) .attr(“ class”,“ input-leaf”) .attr(“ width”,elementwidth) .attr(“ height”,elementheight) .attr(“ x”,inputstartx) .attr(“ y”,function(d,i){ 返回Number(inputstarty)+(elementheight * i)+垂直边距; }) .attr(“ stroke”,function(d){ 返回d.col; });
2021-01-08 08:12:37
你只是搞砸了-> selectAll() var输入= [{{text“:” inleaf1“,” col“:”红色“},{” text“:” inleaf2“,” col“:” blue“},{” text“:” inleaf3“,” col“:” green“}]; var elementwidth = 120; var elementheight = 50; var inputstartx = 20; var inputstarty = 20; //////////// y对于每个矩形都应更改 var verticalmargin = 20; var canvas = d3.select(“。canvas”); var inputcontainer = d3.select(“#input-container”); var inputleaf = inputcontainer.selectAll('。rect') .data(输入) .enter()。append(“ rect”) .attr(“ class”,“ input-leaf”) .attr(“ fill”,“ none”) .attr(“ width”,elementwidth) .attr(“ height”,elementheight) .attr(“ x”,inputstartx) .attr(“ y”,function(d,i){ 返回elementheight *(2 * i + 1); }) .attr(“ stroke”,function(d){ 返回d.col; }); -->