jQuery遍历表格单元格并从循环中添加小时

时间:2013-07-15 00:15:16

标签: javascript jquery

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

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

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

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

另外,我不确定这会有多复杂。如果每个细胞被分成两个细胞以适应30分钟的间隔(因此总共36列)。是否可以将整个小时以及他们尊重的30分钟间隔包含在循环中(如果有意义的话)?

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

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

var arr = $("td.daterow");
for (var h = 6; h < 24; h++) {
    $(arr[h-6]).attr("data-hour", h);
}

答案 2 :(得分:0)

执行两个嵌套循环,for和每个()循环使用固定的h。

这可能有用(对不起,我现在在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 */);
  }
});

答案 3 :(得分:-1)

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