我对JS很新,所以请原谅任何可能完全错误的事情。
我正在尝试动态创建一个16x16的div网格。我的逻辑是我为所有网格创建了一个容器,在容器内我会追加16行,每行我会追加16个盒子。我对我的代码有一个粗略的想法,我想检查它是否是有效的逻辑和JS。
/* Creating the grid */
function grid() {
var container = document.createElement("div");
container.id = "main";
container.className = "container";
for (i=0, i<16, i+=1) {
var row = document.getElementbyId('main').appendChild('div');
row.className = "row";
row.id = "row" + i;
};
for (j=0, j<16, j+=1) {
for (k=0, k<16, k+=1) {
var box = document.getElementbyId("row" + j).appendChild('div');
box.className = "box";
};
};
};
答案 0 :(得分:1)
<强>原因强>
代码存在一些问题。
for
循环的语法为for(init;condition;final-expression)
,请参阅for
的手册。appendChild
要求节点不是字符串。grid()
没有做任何事情。它应该返回一个节点,接受一个要附加到的节点或者在某个地方插入内容,由你来决定。<强>样本强>
请参阅下面的演示,了解更正后的代码和演示。
/* Creating the grid */
function grid(el) {
var container = document.createElement("div");
container.id = "main";
container.className = "container";
for (i=0; i<16; i+=1) {
var row = document.createElement("div");
row.className = "row";
row.id = "row" + i;
for (k=0; k<16; k+=1) {
var box = document.createElement("div");
box.className = "box";
row.appendChild(box);
};
container.appendChild(row);
};
el.appendChild(container);
};
grid(document.body);
.row {
border:1px solid green;
height:1em;
line-height:1em;
}
.box {
display:inline-block;
width:6.25%;
height:1em;
box-sizing:border-box;
border:1px solid red;
}
答案 1 :(得分:0)
虽然逻辑是正确的,但是有很多语法/类型错误,而且存储可重用变量也会更有效,并且只有2个循环,如下所示
function grid(d) {
var container = d.createElement("div");
container.id = "main";
container.className = "container";
for (i=0; i<16; i++) {
var row = container.appendChild(d.createElement('div'));
row.className = "row";
row.id = "row" + i;
for (k=0; k<16; k++) {
var box = row.appendChild(d.createElement('div'));
box.className = "box";
};
};
d.body.appendChild(container);
};
grid(document);
答案 2 :(得分:0)
/* Creating the grid */
function grid (content) {
var container = content.appendChild(document.createElement("div"));
container.id = "main";
container.className = "container";
for (var i = 0;i < 16;++i) {
var row = container.appendChild(document.createElement("div"));
row.className = "row";
row.id = "row" + i;
for (var k = 0;k < 16;++k) {
var box = row.appendChild(document.createElement("div"));
box.className = "box";
}
}
}
grid(document.body)
&#13;
代码中的一些错误:
container
也需要插入某处。appendChild
接受节点,而不是字符串for loop
使用;
分隔表达式,而不是,
(它们都是可选的)答案 3 :(得分:0)
你应该注意你在for循环中滥用语法。
你可能想要这个:
'use strict';
function grid() {
var container = document.createElement('div');
container.id = "main";
container.className = "container";
for (var i = 0; i < 16; i++) {
var row = document.createElement('div');
row.className = "row";
row.id = "row" + i;
for (var j = 0; j < 16; j++) {
var box = document.createElement('div');
box.className = 'box';
row.appendChild(box);
}
container.appendChild(row);
}
return container;
}
console.log(grid());
// and you should use
// document.getElementById('xxx').appendChild(grid());
您可以参考:
答案 4 :(得分:0)
您需要注意很多语法错误,例如:
for循环,它应该包含半冒号而不是逗号...
你需要在添加之前每次创建div,就像你为容器所做的那样。
这是一个有效的代码:
function grid(){
var container = document.createElement("div");
container.id = "main";
container.className = "container";
document.body.appendChild(container);
var main = document.getElementById('main');
for (var i=0; i<16; i++) {
var row = document.createElement("div");
row.className = "row";
row.id = "row" + i;
main.appendChild(row);
var roww = document.getElementById('row'+i);
for (var j=0; j<16; j++) {
var box = document.createElement("div");
box.className = "box";
roww.appendChild(box);
}
}
}
window.onload = grid();
这是A fiddle