将html div元素插入到二维数组中

时间:2015-03-05 12:32:20

标签: javascript html arrays

var mainCube = Array.prototype.slice.call(document.querySelectorAll('.mainCubeClass'));//assume there are **three**
if (mainCube !== null) {
    for (k = 0; k < mainCube.length; k++) {
        mainCube[k] = new Array(15);
    } //fill each slot in the array with an array of 15 slots
    document.write("Check1");//everything good so far
    for (var i = 0; i < mainCube.length; i++) {
        document.write("Check2");//okay, still good
        for (var j = 0; j < mainCube[i].length; j++) { //this is now 15
            document.write("Check3");//everything still as expected
            mainCube[i][j] = document.createElement('div');
            mainCube[i][j].className = '.letterPix';
            mainCube[i].appendChild(mainCube[i][j]);
            document.write("Check4"); //doesn't execute
        }
    }

我需要将div元素输入到二维数组中。我想动态创建这些div,因为.mainCubeClass可能因页面而异。我已经用1d数组完成了这个但是我已经碰到了一堵墙现在我似乎无法通过2d数组而已经将错误区域缩小到“check3”和“check4”之间的位置,但我可以好像找到了解决方案。有没有人认为他们可能知道如何将创建的每个新元素插入到我的2d数组的插槽中。

例如,如果有3个.mainCubeClasse,则应创建总共45个元素,并将其插入位置mainCube[0][0] ... mainCube[0][1]等等。

2 个答案:

答案 0 :(得分:0)

问题是您正在将数组mainCube更改为数组数组,因此mainCube[i].appendChild(mainCube[i][j])将失败,因为mainCube[i]是数组而不是元素

var els = Array.prototype.slice.call(document.querySelectorAll('.mainCubeClass')); //assume there are **three**
if (els !== null) {
    //use a separate array to store the cube
    var mainCube = new Array()
    for (k = 0; k < els.length; k++) {
        mainCube.push(new Array(15))
    } //fill each slot in the array with an array of 15 slots
    for (var i = 0; i < els.length; i++) {
        for (var j = 0; j < mainCube[i].length; j++) { //this is now 15
            mainCube[i][j] = document.createElement('div');
            mainCube[i][j].className = '.letterPix';
            mainCube[i][j].innerHTML = i + ':' + j
            els[i].appendChild(mainCube[i][j]);
        }
    }
}

演示:Fiddle


var els = Array.prototype.slice.call(document.querySelectorAll('.mainCubeClass')),
    i, j, el, mainCube = [],
    row;
for (var i = 0; i < els.length; i++) {
    row = [];
    mainCube.push(row);
    for (var j = 0; j < 15; j++) { //this is now 15
        el = document.createElement('div');
        el.className = 'letterPix';
        el.innerHTML = i + ':' + j
        row.push(el)
        els[i].appendChild(mainCube[i][j]);
    }
}

演示:Fiddle

答案 1 :(得分:0)

这里有几个问题。

  1. if (mainCube != null)检查中没有任何意义,你永远不会有null。您可能有一个空数组,但不是null

  2. 在第一个循环中,mainCube[k] = new Array(15)用空白数组替换在该位置的元素。因此,首先查找元素毫无意义。

  3. mainCube[i][j].className = '.letterPix';班级名称真的,不应该以{{1​​}}开头(我不知道它是否在技术上允许,但它&#39} ;一个非常糟糕的主意。)

  4. 重新.:数组没有mainCube[i].appendChild(mainCube[i][j]);方法,但appendChild是一个数组。

  5. 我不知道你想用你最初查找的元素做什么,但如果你想创建一个3x15的mainCube[i]元素数组,那么:

    div

    如果您的目标是创建这15个div并将它们附加到您最初查找的元素上,那么:

    var i, j, mainCube, a, div;
    mainCube = [];
    for (i = 0; i < 3; ++i) {
        mainCube[i] = a = [];
        for (j = 0; j < 15; ++j) {
            // Create the div
            mainCube[i][j] = div = document.createElement('div');
    
            // Add class and such to div
            div.className = "letterPix"; // No dot!
    
            // Append it to something
        }
    }
    

    实例:

    &#13;
    &#13;
    var i, j, mainCube, a, div, elements;
    elements = document.querySelectorAll(".mainCubeClass");
    mainCube = [];
    for (i = 0; i < elements.length; ++i) {
        mainCube[i] = a = [];
        for (j = 0; j < 15; ++j) {
            // Create this div
            mainCube[i][j] = div = document.createElement('div');
    
            // Add class and such to div
            div.className = "letterPix"; // No dot!
    
            // Append it to the mainCubeClass element
            elements[i].appendChild(div);
        }
    }
    
    &#13;
    (function() {
      "use strict";
      var i, j, mainCube, a, div, elements;
      elements = document.querySelectorAll(".mainCubeClass");
      mainCube = [];
      for (i = 0; i < elements.length; ++i) {
          mainCube[i] = a = [];
          for (j = 0; j < 15; ++j) {
              // Create this div
              mainCube[i][j] = div = document.createElement('div');
    
              // Add class and such to div
              div.className = "letterPix";
    
              // Append it to the mainCubeClass element
              elements[i].appendChild(div);
          }
      }
    })();
    &#13;
    .mainCubeClass {
      border: 1px solid #02c;
    }
    .letterPix {
      border: 1px solid #888;
      width: 10px;
      height: 10px;
      display: inline-block;
    }
    &#13;
    &#13;
    &#13;