function bind() {
let trList = document.querySelectorAll("tr");
Array.from(trList).forEach((tr, trIdx) => {
Array.from(tr.children).forEach((td, tdIdx) => {
td.setAttribute("data-coord", `${trIdx},${tdIdx}`);
});
});
document.onkeydown = (event) => {
if (!event) return;
var code = event.keyCode || "";
if (!{ 37: 1, 38: 1, 39: 1, 40: 1 }[code]) return;
event.preventDefault && event.preventDefault();
//TODO: 请实现按键控制
let curPoint = document.querySelector(".current");
let curCoord = curPoint.dataset.coord.split(",");
let curTr = curPoint.parentNode;
let tdMax = curTr.children.length;
let trMax = curTr.parentNode.children.length;
curPoint.classList.remove("current");
if (code === 37) {
//左
curTr.children[
curCoord[1] == 0 ? tdMax - 1 : Number(curCoord[1]) - 1
].classList.add("current");
}
if (code === 38) {
//上
curTr.parentNode.children[
curCoord[0] == 0 ? trMax - 1 : Number(curCoord[0]) - 1
].children[curCoord[1]].classList.add("current");
}
if (code === 39) {
//右
curTr.children[
curCoord[1] == tdMax - 1 ? 0 : Number(curCoord[1]) + 1
].classList.add("current");
}
if (code === 40) {
//下
curTr.parentNode.children[
curCoord[0] == trMax - 1 ? 0 : Number(curCoord[0]) + 1
].children[curCoord[1]].classList.add("current");
}
};
}
第一次写这种类型的题,写完看了下讨论区,发现对dom操作和坐标相关理解还是不够深刻
我的思路是先给表格初始化自定义属性 给每个td添加坐标 然后操作 主要是怎么把xy对应到dom操作不是很熟练 写的复杂了些

京公网安备 11010502036488号