[英]Creating a dynamic grid with Javascript
我是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";
};
};
};
原因
代码存在一些问题。
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; }
是的,尽管存在许多语法/类型错误,但逻辑是正确的,并且存储可重用的变量并且仅具有如下所示的两个循环会更高效
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);
/* 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)
您的代码中的一些错误:
container
需要插入到某个地方。 appendChild
接受节点,而不是字符串 for loop
;
分隔表达式,不是,
(它们都是可选的) 您应该注意在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());
您可以参考:
您有很多语法错误需要注意,例如:
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();
这是小提琴
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.