1

我有以下代码在 0600-2300 小时内循环。基本上,我想花时间将它们添加到表格单元格属性中。有多td.daterow行,每行都有 0600-2300 小时的列。

for (var h = 6; h < 24; h++)
{
  $( "td.daterow" ).each(function() {
     $(this).attr("data-hour", h);
  });
}

但是这段代码不会像我想要的那样循环几个小时。而不是具有属性 0600-2300 的单元格,它只是将“23”添加到每个data-hour. 如何循环播放时间并相应地添加它们?

==============================

另外,我不确定添加它会有多复杂。如果每个单元格被分成两个单元格以适应 30 分钟的间隔(所以总共 36 列)。是否可以在循环中包括整个小时以及他们尊重的 30 分钟间隔(如果有意义的话)?

4

4 回答 4

2

假设已经存在正确数量的表格单元格,问题就在于对于每个小时值,您正在循环遍历每个表格单元格并对其进行设置。自然地,每个小时的值都会覆盖之前的值。

要解决此问题,请删除外部循环并使用 td 元素的索引来确定小时。

$( "td.daterow" ).each(function(index) {
    var hour = index + 6;
     (this).attr("data-hour", hour);
  });
于 2013-07-15T00:31:02.597 回答
2

你需要更仔细地遍历你的循环。$(this).attr("data-hour", h)您对所有td.daterow元素执行的每次迭代。

因此,在第一次迭代中,h=6您将 each 设置data-hour为 6。在第二次迭代中h=7,您现在用 7 覆盖每个data-hour属性。当我们循环时,这将一直持续到 eachdata-hour为 23,此时h=24循环终止。

我不确定您要做什么,但我认为您希望将每个设置data-hour为一个连续更高的值(或小时)。你可以这样做:

var arr = $("td.daterow");
for (var h = 6; h < 24; h++) {
    $(arr[h-6]).attr("data-hour", h);
}
于 2013-07-15T00:34:19.227 回答
0

您执行两个嵌套循环,即具有固定 h 的 for 和 each() 循环。

这可能有效(对不起,我现在在 iPad 上,无法测试 :-)

$.each($("td.daterow"), function(idx, ele) {
  var h = 6 + (idx % 18);
  ele.attr("data-hour", h);
});

扩大的视野:

$.each($("td.daterow"), function(idx, ele) {
  var i = idx % 36;
  if (i % 2 == 0) {
    var h = 6 + (i / 2);
    ele.attr("data-hour", h);
  } else {
    var h = 6 + ((i-1)/2);
    ele.attr( /* half hour treatment based on h */);
  }
});
于 2013-07-15T00:28:44.527 回答
-1
var h = 6;
$( "td.daterow" ).each(function() {
  if(h<24 && h>=6) {
    $(this).attr("data-hour", h + "00");
    h++;
  }
});
于 2013-07-15T00:20:35.927 回答