对我来说似乎不可能的简单问题,因为我只是盯着代码。
基本上我有这个函数,我把它称为X次,它应该把所有创建的div放在一个名为world的数组中,我已经在函数之外声明了。
但是,如果我尝试使用其中一个值,则它们是“未定义的”。
var world = [];
function newTile(x, y, size, rotX, rotY, rotZ, tranX, tranY, tranZ, color) {
var tile = document.createElement('div');
tile.className = "tile";
tile.style.width = size+"px";
tile.style.height = size+"px";
tile.style.webkitTransform =
"rotateX("+rotX+"deg)"+
"rotateY("+rotY+"deg)"+
"rotateZ("+rotZ+"deg)"+
"translateX("+tranX+"px)"+
"translateY("+tranY+"px)"+
"translateZ("+tranZ+"px)";
tile.style.transform =
"rotateX("+rotX+"deg)"+
"rotateY("+rotY+"deg)"+
"rotateZ("+rotZ+"deg)"+
"translateX("+tranX+"px)"+
"translateY("+tranY+"px)"+
"translateZ("+tranZ+"px)";
if (x == 0 && y == 0) {
color="rgba(255,255,0,0.5)";
pathStart = tile;
pathCur = tile;
}
tile.style.backgroundColor = color;
tile.data = {
x:x,
y:y,
blacklist:0
}
tile.onclick = function() {
worldOri(null,null,null, -this.data.x*128 - 64, null, -this.data.y*128 - 64);
};
if (debug) tile.textContent = x+", "+y;
document.getElementById('world').appendChild(tile);
world[x] = [];
world[x][y] = tile;
}
假设我做了类似的事情:
newTile(2,6,128,90,0,0,2*128,0,6*128, "rgba(255,125,0,0.5)");
这可以按预期工作,并且肯定会创建一个div,将其置于另一个具有id“world”的div中,并且应该在[2] [6]处将div添加到数组“world”中。如果我现在尝试用div做某事,例如改变颜色:
world[2][6].style.backgroundColor = "rgba(255,0,0,0.5)";
它返回为undefined,我假设实际添加到“world”数组不起作用,请帮忙。
答案 0 :(得分:2)
world[x] = [];
时, world[x]
都会指定一个空数组newTile
,从而“移除”world[x]
中的所有现有切片。只有在它不存在时才初始化它:
world[x] = world[x] || [];