私はjavascriptを初めて使用しています。この黒い四角形を進むためのキーボードボタンを押しています。ネイティブJavaScriptで次のHTML兄弟を選択する
<td>
要素を、すでにクラスを持っている<td>
に次の行(または兄弟)である「アクティブ」のクラスを与えるためにkeypressするにはどうすればいいですか? "アクティブ"。私はまた、現在の '<td class="active">
'要素を持って、それが同時に「アクティブ」クラスを削除したいと思っています。
これまでは、<td>
をクリックして、アクティブなクラスを周囲の兄弟から削除しながら、選択した<td>
のクラスをアクティブにする機能を作成しました。クリックする代わりに、文字「m」を押したときに、次の文字「<td>
」に「アクティブ」を与えたいと思います。
謝罪、私は説明が下手だ場合:ここに私のコードは次のとおりです。
var racerTable = document.getElementsByClassName("racer-table");
var p1items = document.getElementById("player1-strip").querySelectorAll("td");
var lastp1 = p1items[p1items.length-1];
for (var i = 0; i < p1items.length; i++) {
p1items[i].addEventListener("click", player1Race);
}
function player1Race() {
for (var i = 0; i < p1items.length; i++) {
p1items[i].className = "";
}
// The expression below is where I need help
this.className = "active";
\t if (lastp1.className === "active") {
\t alert("Player One Won!");
} else {
}
}
.racer-table td {
background-color: #ededed;
height: 50px;
width: 50px;
}
.racer-table td.active {
background-color: black;
}
<body>
<table class="racer-table">
<tr id="player1-strip">
<td class="active"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
JSFiddle:
https://jsfiddle.net/sean_johnson/bgdb716d/139/
clickイベントの 'this 'を' document.querySelectorAll( "td.active");で置き換えます。 '' elm.nextElementSibling'を調べると、いくつかの入力を省くことができます。 – dandavis
テーブル内のセルには、 [* cellIndex *](https://www.w3.org/TR/html5/tabular-data.html#dom-tdth-cellindex)。訪問先の次のセルが同じ行にある場合は、次に高いインデックスを持つセルを取得します。例えば。 'row = cell.parentNode; nextCell = row.cells [cell.cellIndex + 1] '。リスナーをすべてのセルに配置するのではなく、単一のリスナーをテーブルに配置することを検討してください(イベント委任の検索)。 – RobG