使用Javascript创建动态网格

时间:2015-08-03 01:34:49

标签: javascript dynamic

我对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";
        };
    };
};

5 个答案:

答案 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)

&#13;
&#13;
/* 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;
&#13;
&#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