我有以下for
循环,它将rect
追加到group
元素:
var svg_container = d3.select(element[0]).append('svg')
.attr('width', width)
.attr('height', 50)
var legend_group = svg_container.append('g');
for(var i = 0; i < 5; i++) {
legend_group.append('rect')
.attr('x', i += 10)
.attr('y', 5)
.attr('width', 10)
.attr('height', 5)
.attr('fill', 'red')
}
但它仅针对i = 0
运行,并且没有错误。但是,当我删除attr
链接时,它的工作原理如下:
for(var i = 0; i < 5; i++) {
legend_group.append('rect');
}
为什么for
循环没有为每次迭代执行?
答案 0 :(得分:3)
这是因为在这一行中,您将i
本身的行为超过5
。
.attr('x', i += 10)
你应该拥有它,只读.attr('x', i + 10)
。
答案 1 :(得分:1)
因为你在这行中添加了+10 +。(&#39; x&#39;,i + = 10)。我想你需要像i + 10
这样的东西答案 2 :(得分:1)
for循环的第二个字段是在每次循环运行之前检查的条件。在循环内部,你将向我添加10并同时分配它。在第一次运行之后,循环逻辑看到i为10并且退出,因为不再满足条件(i <5)。只需将i += 10
更改为i + 10
或i * 10
。
答案 3 :(得分:0)
这是因为你在第一个循环中将增量计数器加10:
.attr('x', i += 10)
之后,在第一次迭代中,i
为10,这大于你的限制。
很可能你错误地使用了相同的变量,但这里没有足够的信息。但是,如果您这样做,请更改循环内的i
或i
循环条件中的for