我决定乱用jquery并制作一个简单的基于轴测图的游戏。它呈现了一些地图,然后有一个堆栈问题。 (超出最大调用堆栈大小) 我现在只是为瓷砖使用背景颜色。
var map = [
"g","g","g","s","s",
"g","g","s","s","w",
"g","g","s","w","w",
"g","g","s","w","w",
"g","g","s","w","w"
];
var x = 0;
var y = 0;
var count = 0;
var background;
function init() { $.each( map, function( key, value ) {
x += 30;
y += 60;
if (count > 4){
x -= 120;
y -= 360;
count = 0;
}
if (value == "g"){background = "#00ff00";}
if (value == "w"){background = "#0000ff";}
if (value == "s"){background = "#ffff00";}
$('.map_piece').clone().appendTo('body').css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background});
count ++;
});
}
$('document').ready(function(){
init();
});
答案 0 :(得分:5)
在每次迭代k中,你克隆2 ^ k项。
不是克隆元素,每次创建新元素可能更容易:
$('<div class="map_piece">')
.appendTo('body')
.css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background});
答案 1 :(得分:4)
调用$('.map_piece').clone()
克隆到目前为止已创建的所有片段。每次循环运行时,这会导致克隆元素数量呈指数增长。要执行您打算执行的操作,请使用first()
将克隆限制为仅一个元素。
$('.map_piece').first().clone().appendTo('body').css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background});