8

我有这个代码:

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--) {

有人可以解释为什么吗?

编辑:如何让我的预期语法输出?

4

4 回答 4

22

在 CoffeeScript 中,您需要使用by关键字来指定循环的步骤。在你的情况下:

for x in [1...count] by 1
  ...
于 2012-04-20T13:15:00.340 回答
3

您要求从 to 循环1count但您假设它count总是大于或等于一;生成的代码没有做出这种假设。

因此,如果count>= 1,则循环计数器每次都会递增:

for (x = 1; x < count; x++) { /* ... */ }

但如果count是 < 1 则循环计数器每次递减:

for (x = 1; x > count; x--) { /* ... */ }
于 2012-04-20T12:42:53.217 回答
2

好吧,你想x从 1 到count. 该代码正在检查是否count大于或小于 1。

如果count大于 1,则它必须在小于递增xcount

如果count小于 1,则它必须在大于递减xcount

于 2012-04-20T12:44:04.037 回答
0

备查:

$('#content .post').each ->
    prev_el_height += $(this).height()

具有相同的效果,假设:nth-child等于.eq(),并且x超过元素的数字是一个错字。

于 2012-04-21T03:13:42.567 回答