嵌套'对于'循环以创建表
Nested 'for' Loop to Create Table
我一直在学习一门名为"奥丁项目"的课程,我在一个项目上遇到了困难,因为我们必须创建一个类似Etch-a-Sketch的画板。
该项目的要点是…每当你将鼠标悬停在表中的一个单元格上时,就会向该单元格添加一个类来更改颜色。我已经使用jQuery/javascript创建了一些代码,通过使用两个"for"循环附加表行和单元格来创建方形网格(请参阅下面的脚本)。
我的问题是,每当我用附加代码运行"for"循环来创建网格时,我都不会得到方形网格。例如,我认为将两个"For"循环都设置为4的极限应该会给我一个4行、4个单元格的网格。我实际得到的是第一行有16个单元格,第二行有12个单元格,等等…我哪里错了?
链接到jsfiddle。。。
http://jsfiddle.net/rellbows/qka0ago7/1/
for (var w = 0; w < 4; w++) {
$('tbody').append('<tr></tr>');
for (var j = 0; j < 4; j++) {
$('tr').append('<td class="square"></td>');
}
}
您需要将方形td
元素附加到刚刚创建的最后一个tr
元素上。您将td
元素附加到所有tr
元素。
为此,您可以使用:last
选择器,也可以使用.last()
方法。
更新示例
$('tr:last').append('<td class="square"></td>');
您也可以创建一个tr
元素,将td
元素附加到它,然后将该tr
元素附加到表中:
更新示例
for (var w = 0; w < 4; w++) {
var $tr = $('<tr></tr>');
for (var j = 0; j < 4; j++) {
$tr.append('<td class="square"></td>');
}
$('tbody').append($tr);
}
您正在将每个表单元格附加到之前的每个tr
标记。
相反,您应该识别每一行,并将当前行的单元格附加到该行。
for (var w = 0; w < 4; w++) {
$('tbody').append('<tr id="row' + w + '"></tr>');
for(var j = 0; j < 4; j++) {
$('#row' + w).append('<td class="square"></td>');
}
}
JSFiddle
试试这个:fiddle
$(document).ready(function() {
for (var w = 0; w < 4; w++) {
$('tbody').append('<tr>');
for(var j = 0; j < 4; j++) {
$('tbody').append('<td class="square"></td>');
}
$('tbody').append('</tr>');
}
})
两项更改。。。首先,您必须始终附加到同一个元素"tbody"上。使用$(tr)是附加到所有<tr>
标签上
其次,开始和结束td标记需要位于内部循环的每一侧。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 对于循环,在 p5.js 中创建形状
- 对于 a=1;a<100;a++,然后在 a 乘以 3 时创建一个
- 创建自定义“;事件“;对于构造函数
- 对于使用Object.create()创建的数组,Array.isArray()返回false
- 嵌套'对于'循环以创建表
- 是$scope$对于一个大型应用程序来说,广播速度足够快,或者我应该创建一个自定义消息总线
- 对于动态创建的元素,在没有单击的情况下在执行时调用
- 创建全局'for'变量.应该是'对于(var项目…'
- 对于第一次使用ng-repeat而不是第二次使用ng-repeat创建的单选按钮,调用Ng-change事件
- 在javascript中:改变"src"对于新创建的script-element不起作用…
- 对于动态创建的元素,只绑定一次单击事件
- 对于尚未创建的元素,单击Onclick元素
- 对于新的动态创建的元素,单击事件不持久
- 是否可以创建“锚点”?对于一个图像,在另一个图像