我一直在寻找这个,虽然我遇到了一些类似的答案,但大多数似乎与HTML5有关。我正在寻找一个jQuery解决方案来创建一个由空<div>
组成的NxN网格。
这就是我所说的,但我认为错误在于尝试在页面上显示2D数组。理想情况下,我希望在名为grid
的数组中有一个X x Y网格,其元素最终可以使用。然而,这种方法给我带来了一些困难 - 我做错了什么? (注意我在这里使用&#39; X&#39;为了示例目的)
function draw_board(x,y){
var grid=[];
for (var j=0;j<x;j++){
for(var i=0;i<y;i++){
grid[j][i]='<div>X</div>'
}
}
$('body').append(grid);
}
修改
我在控制台中看到的具体错误是Uncaught TypeError: Cannot set property '0' of undefined
,位于grid[j][i]='<div>X</div>'
行。
答案:
如果其他人在将来偶然发现这种情况,下面有3个好的答案。
$('body').append(grid.join(''));
而不是$('body').append(grid);
grid[j]=[];
grid[j][i]=[];
答案 0 :(得分:2)
我意识到这与您尝试做的事情略有不同,但您认为在这种情况下您可能会发现它很有用。
您可以为行中的每个div使用一个浮点数,然后使用带有style="clear:both"
的div来开始新行。
以下是JSFiddle
中的代码.box {
float:left;
width:100px;
height:100px;
margin-right:5px;
margin-bottom:5px;
background-color:#0000FF;
}
var $container = $("<div></div>").css("float","left");
for(var i = 0; i < 3; i++) {
for (var j = 0; j < 4; j++){
$("<div></div>").addClass("box").appendTo($container);
}
$("<div></div>").css("clear", "both").appendTo($container);
}
$container.appendTo($("body"));
答案 1 :(得分:1)
您需要使用网格连接:
$('body').append(grid.join(''));
或者,您可以使用空对象而不是数组:
function draw_board(x,y){
var grid = $();
for (var j=0;j<x;j++){
for(var i=0;i<y;i++){
grid.add('<div>X</div>');
}
}
$('body').append(grid);
}
答案 2 :(得分:1)
这是因为网格是一维数组。当它试图访问grid [0] [i]时,它会给出错误,因为grid [0]是空的,而不是数组。
试试这个:
function draw_board(x,y){
var grid=[];
for (var j=0;j<x;j++){
grid[j] = [];
for(var i=0;i<y;i++){
grid[j][i]='<div>X</div>'
}
}
$('body').append(grid);
}