Javascript 如何在表中创建二维数组?
我想为Connect Four游戏创建一个表,我想通过设置一个二维7*6数组来实现这一点,如果有意义的话,将每个数组放在每个单元格中。我是Javascript新手,对面向对象编程没有太多知识。我试图给每个单元格指定一个xPosition和yPosition(坐标,可能在它们的“id”中),以便游戏可以检查是否有蓝色或黄色的行或列 迄今为止的代码,粗略尝试:Javascript 如何在表中创建二维数组?,javascript,html,arrays,for-loop,html-table,Javascript,Html,Arrays,For Loop,Html Table,我想为Connect Four游戏创建一个表,我想通过设置一个二维7*6数组来实现这一点,如果有意义的话,将每个数组放在每个单元格中。我是Javascript新手,对面向对象编程没有太多知识。我试图给每个单元格指定一个xPosition和yPosition(坐标,可能在它们的“id”中),以便游戏可以检查是否有蓝色或黄色的行或列 迄今为止的代码,粗略尝试: function make() { var table = document.createElement("tabl
function make()
{
var table = document.createElement("table");
for (var i = 0; i < 6; i++)
{
var row = table.inserRow();
for (var j = 0; j < 5; j++)
{
var cell = row.insertCell;
}
document.body.appendChild(table);
}
}
函数make()
{
var table=document.createElement(“表”);
对于(变量i=0;i<6;i++)
{
var行=table.inserRow();
对于(var j=0;j<5;j++)
{
var cell=row.insertCell;
}
document.body.appendChild(表);
}
}
一些用jQuery编写的非常快速的解决方案。我粘贴了整个html,所以您可以将其保存为html文件并在浏览器中打开。可以单击单元格查看坐标(基于0)
网格
表tr td{宽度:50px;高度:50px;背景色:银色;边框:1px纯黑;}
表tr td.over{背景色:黄色;}
表tr td.active{背景色:红色;}
.controls{padding:20px;}
$(文档).ready(函数(){
变量行=6,
cols=7;
对于(变量i=0;i0){
var move=$.parseJSON($(this.attr('data-move'));
如果(move.length>=2){
$active.each(函数(){
var row=parseInt($(this).attr('data-row'))+move[1],
col=parseInt($(this.attr('data-col'))+move[0];
如果(col>=cols)col=cols-1;
如果(col<0)col=0;
如果(行>=行)行=行-1;
如果(行<0)行=0;
$(this.removeClass('active');
$('table tr').eq(row.find('td').eq(col.addClass('active'));
});
}
}
});
});
请注意,如果更改行
和列
变量,则可以绘制更大的网格
我添加了带有按钮的控件
div,这样你就可以玩方向了。首先,您需要将元素标记为活动的,并且您可以单击它们来移动它们
在我看来,有一个bug(或特性)可以标记多个字段并同时移动它们
这是一个很好的开始 你会使用jQuery吗?这会容易得多…我不知道,我不知道如何将jquery输入到我的代码中,而不是如何使用它,我想我应该看看它,然后呢?哇!太好了!多年来我一直在试图弄明白这一点,这是巧妙地做到了!谢谢你的帮助!p、 因为我只有一个名声,所以美国不能给我的答案打分@BenTaylor-没关系-我只花了15分钟-我很高兴我帮了忙。我最近也遇到了这样一个情况,我需要换到一个td旁边的那个。正如你大致知道我想做什么,并且你编程了这个,我是否只需要添加行值?然后做$(这个)等等?还是还有更多@你是说左边、右边、上面还是下面?或者你想指定它,这样你就可以去你想去的每个方向?我想去右边和左边,以及上下,但是我想如果我知道一个我可以做其他的,我想检查右边的一个,然后是右边的一个,依此类推,直到我在那个方向检查了四个,因此连接四个游戏。
<html>
<head>
<title>GRID</title>
<style type="text/css">
table tr td { width: 50px; height: 50px; background-color: silver; border: 1px solid black; }
table tr td.over { background-color: yellow; }
table tr td.active { background-color: red; }
.controls { padding: 20px; }
</style>
</head>
<body>
<div class="controls">
<a href="javascript:void(0)" data-move="[-1, 0]">left</a>
<a href="javascript:void(0)" data-move="[0, -1]">top</a>
<a href="javascript:void(0)" data-move="[1, 0]">right</a>
<a href="javascript:void(0)" data-move="[0, 1]">bottom</a>
<a href="javascript:void(0)" data-move="[-1, -1]">topleft</a>
<a href="javascript:void(0)" data-move="[1, -1]">topright</a>
<a href="javascript:void(0)" data-move="[1, 1]">bottomright</a>
<a href="javascript:void(0)" data-move="[-1, 1]">bottomleft</a>
</div>
<table></table>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var rows = 6,
cols = 7;
for(var i = 0; i < rows; i++) {
$('table').append('<tr></tr>');
for(var j = 0; j < cols; j++) {
$('table').find('tr').eq(i).append('<td></td>');
$('table').find('tr').eq(i).find('td').eq(j).attr('data-row', i).attr('data-col', j);
}
}
$('table tr td').mouseover(function() {
$(this).addClass('over');
}).mouseout(function() {
$(this).removeClass('over');
}).click(function() {
$(this).addClass('active');
});
$(".controls a").click(function() {
var $active = $("table tr td.active");
if($active.length > 0) {
var move = $.parseJSON($(this).attr('data-move'));
if(move.length >= 2) {
$active.each(function() {
var row = parseInt($(this).attr('data-row')) + move[1],
col = parseInt($(this).attr('data-col')) + move[0];
if(col >= cols) col = cols - 1;
if(col < 0) col = 0;
if(row >= rows) row = rows - 1;
if(row < 0) row = 0;
$(this).removeClass('active');
$('table tr').eq(row).find('td').eq(col).addClass('active');
});
}
}
});
});
</script>
</body>
</html>