我有以下代码,循环时间为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分钟间隔包含在循环中(如果有意义的话)?
答案 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++;
}
});