我想勾选一些有关证书事件的日子,并标记他们的"连胜" - 我想把它们表示为桌子上的方块或圆圈
作为一个例子"晴天" vs."阴天"
每个COLUMN将计算一个事件的发生,并且事件的更改将移动到下一个COLUMN。序列将逐行向上(或向下)。
示例 - 表格5行x 10列(S =晴天,C =多云) 只需使用javascript - 使用两个按钮," s"和" c"我怎么告诉dom接下来标记哪个细胞。
开始表单空白 - 点击" s" s进入第一个单元格,点击" s"并且s进入第一列第二行,单击" c" (并且因为它从最后一天开始变化)ac进入第二列第一行...所以简而言之,如果当前点击与最后一次相同,则进行一行,如果它是&#39 ;不同的是,你进入一个专栏...在这方面,它不应该只是2,我可以有3或4"类型"事件(如雨或雪)。
我会把它全部放在一个数组中:[s,s,s,s,c,c,s,s,s,s,c,s,c,s,c,c,c,c]
将每个事件添加到数组中,然后循环数组,当current!= last ???
时更改但我如何参考'正确'表格单元格?????
<table border="1" width="460" align="center">
<tr>
<td>S</td>
<td>S</td>
<td>S</td>
<td>S</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>C</td>
<td>C</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>S</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>C</td>
<td>C</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>S</td>
<td>S</td>
<td>S</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
答案 0 :(得分:1)
这里的关键是跟踪
每个对应一个变量。循环时,根据需要增加这些变量 例如,如果当前对象与过去的对象(断条)不同,则必须将过去的对象更改为当前对象,然后继续:
if (current !== past) {
past = current;
}
所以这是一个开始。
现在,您必须跟踪当前的单元格。让我们使用JS对象来定义行和列。由于我们从第1行第1列开始,因此我们将默认值设置为:
var cell = {
"row": 1,
"col": 1
}
现在,您必须根据条纹增加行和列。如果延长了条纹,则必须增加该行。如果条纹断开,则必须增加列并将行重新设置为1 :
if (current !== past) {
past = current;
// Increment the column and reset the row
cell.col++;
cell.row = 1;
} else {
// Increment row
cell.row++;
}
现在,我们必须将对象放入正确的单元格中。我们将使用jQuery的类似CSS的选择器来执行此操作。特别是,:nth-child(...)
选择器在这里很有用
此选择器只选择父级内的第n个编号子级。例如,td:nth-child(2)
将选择其父级内的第二个td
。
实现这一点非常简单,因为我们已经拥有cell
对象:
$('table tr:nth-child(' + cell.row + ') td:nth-child(' + cell.col + ')').html(current);
.text(current)
在这里也可以使用,但它只接受纯文本。
我们将array
用作天气事件数组的定义:
var array = [s, s, s, s, c, c, s, s, s, s, c, s, c, s, c, c, c, c];
当然,我们使用for
循环来运行数组:
var s = "s",
c = "c",
array = [s, s, s, s, c, c, s, s, s, s, c, s, c, s, c, c, c, c],
cell = {
"row": 1,
"col": 1
};
for (var i = 0; i < array.length; i++) {
var current = array[i],
past;
// Catch the initial state
if (i === 0) {
past = current;
$('table tr:nth-child(' + cell.row + ') td:nth-child(' + cell.col + ')').html(current);
} else {
past = array[i - 1];
if (current !== past) {
past = current;
// Increment the column and reset the row
cell.col++;
cell.row = 1;
} else {
// Increment row
cell.row++;
}
$('table tr:nth-child(' + cell.row + ') td:nth-child(' + cell.col + ')').html(current);
}
}
<强>的jsfiddle 强>:
http://jsfiddle.net/kTsEx/3/