我有这个代码:
count = $content.find('.post').length;
for x in [1...count]
/*
prev_el_height += $("#content .post:nth-child(" + x + ")").height();
*/
prev_el_height += $content.find(".post:nth-child(" + x + ")").height();
我希望这会变成
for (x = 1; x < count; x++) { prev_el ... }
但它变成了这个:
for (x = 1; 1 <= count ? x < count : x > count; 1 <= count ? x++ : x--) {
有人可以解释一下原因吗?
编辑:如何将预期的语法输出?
答案 0 :(得分:22)
在CoffeeScript中,您需要使用by
关键字来指定循环的步骤。在你的情况下:
for x in [1...count] by 1
...
答案 1 :(得分:3)
您要求从1
循环到count
,但您假设count
总是大于或等于1;生成的代码没有做出这样的假设。
因此,如果count
是&gt; = 1,则每次循环计数器都会递增:
for (x = 1; x < count; x++) { /* ... */ }
但如果count
是&lt; 1然后每次循环计数器递减:
for (x = 1; x > count; x--) { /* ... */ }
答案 2 :(得分:2)
嗯,您希望x
从1到count
。代码检查count
是大于还是小于1.
如果count
大于1,则 x
<{em>} <。{} / p>
如果count
小于1,那么当更大 <{1}}时, count
必须递减 x
。< / p>
答案 3 :(得分:0)
供将来参考:
$('#content .post').each ->
prev_el_height += $(this).height()
具有相同的效果,假设:nth-child
等同于.eq()
,并且x
超过了数字,则元素是拼写错误。