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]
等等。
答案 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)
这里有几个问题。
在if (mainCube != null)
检查中没有任何意义,你永远不会有null
。您可能有一个空数组,但不是null
。
在第一个循环中,mainCube[k] = new Array(15)
行用空白数组替换在该位置的元素。因此,首先查找元素毫无意义。
mainCube[i][j].className = '.letterPix';
班级名称真的,不应该以{{1}}开头(我不知道它是否在技术上允许,但它&#39} ;一个非常糟糕的主意。)
重新.
:数组没有mainCube[i].appendChild(mainCube[i][j]);
方法,但appendChild
是一个数组。
我不知道你想用你最初查找的元素做什么,但如果你想创建一个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
}
}
实例:
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;