Je sais que vous n'avez pas inclus le jquery
sur ce sujet, mais j'ai créé un exemple qui fonctionne aquí ( https://jsfiddle.net/romellem/pg6eveht/ ) en utilisant jQuery pour faciliter les choses.
Il n'y a rien de trop complexe pour lequel vous ne pourriez pas supprimer le jQuery que j'ai utilisé, mais je laisserai cela comme un exercice pour le lecteur :)
J'ai utilisé le modèle de prototype pour créer une classe d'allumeur où l'on passe un sélecteur pour initialiser un tableau. Elle ne prend pas en compte les en-têtes dans le tableau, vous devrez donc les ajouter.
Sinon, j'espère que cela vous aidera à faire un pas dans la bonne direction si vous êtes totalement perdu.
$(document).ready(function() {
var TableHilighter = function(table, selected) {
this.table = $(table);
this.rows = this.table.find('tr').length;
this.cols = this.table.find('tr').first().find('td').length;
this.selected = (typeof selected === 'undefined') ? [1, 1] : selected;
// Hilight our row on initialization
this.hilight();
};
TableHilighter.prototype = {
"hilight": function(cell) {
if (typeof cell === 'undefined') {
cell = this.selected;
}
// Clear all hilighted cells
this.table.find('td').removeClass('hilighted');
// First find the row, then find the col, and add the .hilighted class
this.table.find('tr:nth-child(' + this.selected[1] + ')').find('td:nth-child(' + this.selected[0] + ')').addClass('hilighted');
},
"move": function(dir) {
switch (dir) {
case 'up':
this._up();
break;
case 'down':
this._down();
break;
case 'left':
this._left();
break;
case 'right':
this._right();
break;
default:
break;
}
this.hilight();
return this.selected;
},
"_left": function() {
if (this._x() > 1) {
this._x(this._x() - 1);
}
return this.selected;
},
"_right": function() {
if (this._x() < this.cols) {
this._x(this._x() + 1);
}
return this.selected;
},
"_up": function() {
if (this._y() > 1) {
this._y(this._y() - 1);
}
return this.selected;
},
"_down": function() {
if (this._y() < this.rows) {
this._y(this._y() + 1);
}
return this.selected;
},
"_x": function(x) {
if (typeof x === 'undefined') {
return this.selected[0];
} else {
this.selected[0] = x;
return this.selected[0];
}
},
"_y": function(y) {
if (typeof y === 'undefined') {
return this.selected[1];
} else {
this.selected[1] = y;
return this.selected[1];
}
}
};
// Initialize our TableHilighter
var my_table = new TableHilighter('table');
// Add button event handlers
$('.up').on('click', function(e) {
e.preventDefault();
my_table.move('up');
});
$('.down').on('click', function(e) {
e.preventDefault();
my_table.move('down');
});
$('.left').on('click', function(e) {
e.preventDefault();
my_table.move('left');
});
$('.right').on('click', function(e) {
e.preventDefault();
my_table.move('right');
});
});
table tr td {
border: 1px solid black;
padding: 2px;
}
.hilighted {
border: 2px solid red;
padding: 1px;
}
button.up {
margin-left: 2em;
}
button.down {
margin-left: 1.5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr>
<td>1,1</td>
<td>2,1</td>
<td>3,1</td>
</tr>
<tr>
<td>1,2</td>
<td>2,2</td>
<td>3,2</td>
</tr>
<tr>
<td>1,3</td>
<td>2,2</td>
<td>3,3</td>
</tr>
</table>
<button class="up">Up</button>
<div>
<button class="left">Left</button>
<button class="right">Right</button>
</div>
<button class="down">Down</button>