这几行代码是实现动态创建表格行的核心逻辑。让我详细解释:
代码逻辑分析
if(k==0) { // 当列号为0时(每行的第一个单元格)
// 该行不存在,需要创建新行
tr = document.createElement("tr"); // 创建<tr>元素
tr.id = "tr"+j; // 设置行的ID为"tr0"、"tr1"等
tr.style.backgroundColor = "orange"; // 设置行背景色为橙色
table.appendChild(tr); // 将行添加到表格中
}
else { // 列号不为0时
// 该行已存在,获取已创建的行
tr = document.getElementById("tr"+j); // 通过ID获取已存在的行
}为什么这样设计?
这种设计利用了表格按行逐列填充的特性:
场景模拟
假设要填充一个10列×10行的表格,处理顺序是:
第一轮循环 (i=0):
j=0, k=0 → 创建第0行,ID="tr0"
然后添加第0列的数据
第二轮循环 (i=1):
j=0, k=1 → 列号k≠0
获取已存在的"tr0"行
然后添加第1列的数据
继续直到 i=9:
都是j=0, k=1-9 → 都在第0行添加列
当 i=10:
j=1, k=0 → 创建第1行,ID="tr1"
后续i=11-19都在第1行添加列
执行过程示例
// 假设intArray有20个元素:[a0, a1, a2, ..., a19] i=0: j=0, k=0 → 创建行tr0,添加单元格a0 i=1: j=0, k=1 → 获取tr0,添加单元格a1 i=2: j=0, k=2 → 获取tr0,添加单元格a2 ... i=9: j=0, k=9 → 获取tr0,添加单元格a9 i=10: j=1, k=0 → 创建行tr1,添加单元格a10 i=11: j=1, k=1 → 获取tr1,添加单元格a11 ... i=19: j=1, k=9 → 获取tr1,添加单元格a19
生成的HTML结构
<table id="table"> <tr id="tr0" style="background-color: orange;"> <td>a0</td> <td>a1</td> <td>a2</td> <!-- ... 直到 a9 --> </tr> <tr id="tr1" style="background-color: orange;"> <td>a10</td> <td>a11</td> <td>a12</td> <!-- ... 直到 a19 --> </tr> <!-- 更多行... --> </table>
这种设计的优点
高效:不需要预先创建所有行,按需创建
准确:通过ID精确获取对应的行
灵活:可以轻松地为每行设置不同的样式
内存友好:只创建实际需要的DOM元素
关键点理解
k==0 的判断:每行的第一个数据触发创建新行
tr.id="tr"+j:为每行设置唯一ID,便于后续查找
else分支:后续的列直接获取已存在的行,避免重复创建
这种模式在处理表格数据时非常常见,是一种典型的"懒创建"模式,只在需要时才创建DOM元素。