JavaScript | レベル別練習問題:エレメント(HTML要素・DOM要素操作)

JavaScript
スポンサーリンク

では「エレメント操作」の 基礎〜中級問題(問題1〜10) についても、ステップ実行表(変数・DOM状態を逐次追跡)付き解説 を作ります。


基礎レベル問題(1〜5)ステップ実行

問題1

<p id="text">Hello</p>
HTML
document.getElementById("text").textContent = "こんにちは";
JavaScript
ステップ操作対象前の状態後の状態実行内容
1#text“Hello”“こんにちは”textContent を更新

問題2

<div class="box"></div>
HTML
document.querySelector(".box").style.backgroundColor = "red";
JavaScript
ステップ操作対象前の状態後の状態実行内容
1.box背景色なし背景色:redstyle.backgroundColor を更新

問題3

<ul id="list"><li>1</li><li>2</li></ul>
HTML
let firstItem = document.getElementById("list").firstElementChild;
JavaScript
ステップ操作対象前の状態後の状態実行内容
1#list1, 2firstItem 参照 -> 1最初の子を取得

問題4

document.getElementById("text").classList.add("highlight");
JavaScript
ステップ操作対象前のクラス後のクラス実行内容
1#text“”“highlight”クラスを追加

問題5

document.getElementById("btn").addEventListener("click", function() {
    alert("押されました");
});
JavaScript
ステップ操作対象前の状態後の状態実行内容
1#btnイベントなしクリックで alert 表示イベント登録

中級レベル問題(6〜10)ステップ実行

問題6

let li = document.createElement("li");
li.textContent = "3";
document.getElementById("list").appendChild(li);
JavaScript
ステップ操作対象前の状態後の状態実行内容
1新規 liなし“3”要素作成&テキスト設定
2#list1,21,2,3追加

問題7

document.getElementById("name").setAttribute("placeholder", "名前を入力");
JavaScript
ステップ操作対象前の属性後の属性実行内容
1#nameplaceholder なしplaceholder=”名前を入力”属性追加

問題8

let paragraphs = document.querySelectorAll("p");
paragraphs.forEach(p => p.style.color = "blue");
JavaScript
ステップ操作対象前の状態後の状態実行内容
1p[0]色なしblueスタイル更新
2p[1]色なしblueスタイル更新

問題9

let list = document.getElementById("list");
list.removeChild(list.children[1]);
JavaScript
ステップ操作対象前の状態後の状態実行内容
1#list1,2,31,32番目 li を削除

問題10

let p = document.createElement("p");
p.textContent = "こんにちは";
document.getElementById("container").appendChild(p);
JavaScript
ステップ操作対象前の状態後の状態実行内容
1新規 pなし“こんにちは”要素作成&テキスト設定
2#containerこんにちは追加

解説ポイントまとめ

  1. 基礎
    • 取得・変更・イベント登録が中心
    • 逐次表で操作前後を確認すると理解が早い
  2. 中級
    • 新規要素作成・属性操作・削除
    • 配列・NodeList に対する繰り返し操作も把握可能
  3. ステップ表のメリット
    • DOM操作の順序や影響範囲が視覚化される
    • 初心者のデバッグ理解に最適

上級レベル問題(11〜15)ステップ実行


問題11:リストの各 <li> にインデックス番号を追加

let items = document.querySelectorAll("#list li");
items.forEach((li, index) => {
    li.textContent = `${index + 1}. ${li.textContent}`;
});
JavaScript
indexli.textContent (前)li.textContent (後)実行内容
0Apple1. Appleインデックスを付加
1Banana2. Bananaインデックスを付加

問題12:クリックすると <p> 背景色がランダムに変わるボタン

document.getElementById("btn").addEventListener("click", () => {
    let colors = ["red", "green", "blue", "yellow"];
    let randomColor = colors[Math.floor(Math.random() * colors.length)];
    document.getElementById("text").style.backgroundColor = randomColor;
});
JavaScript
ステップ操作対象前の状態後の状態実行内容
1#btnクリックイベントなしクリックで関数実行イベント登録
2#text背景色なし/前の色ランダム色クリック時に背景色変更

問題13:既存 <ul> の中身をすべて削除して新しい <li> を追加

let list = document.getElementById("list");
list.innerHTML = "";
["A", "B", "C"].forEach(text => {
    let li = document.createElement("li");
    li.textContent = text;
    list.appendChild(li);
});
JavaScript
textlist.innerHTML (前→後)実行内容
A1,2 → A既存削除、追加
BA → AB新規追加
CAB → ABC新規追加

問題14:data-score 属性をもとに条件付きクラス追加

let items = document.querySelectorAll("#list li");
items.forEach(li => {
    let score = parseInt(li.dataset.score);
    if (score >= 70) {
        li.classList.add("passed");
    }
});
JavaScript
li.textContentdata-score条件 score>=70classList (前→後)実行内容
Alice85true“” → “passed”クラス追加
Bob62false“” → “”クラスなし

問題15:5個のボタンを動的生成+クリックイベント

let container = document.getElementById("container");
for (let i = 1; i <= 5; i++) {
    let btn = document.createElement("button");
    btn.textContent = `ボタン${i}`;
    btn.addEventListener("click", () => {
        alert(`ボタン${i}が押された`);
    });
    container.appendChild(btn);
}
JavaScript
ibtn.textContentcontainer.innerHTML (前→後)イベント登録実行内容
1ボタン1“” → “ボタン1”クリック → alert(“ボタン1が押された”)ボタン1生成、追加、イベント設定
2ボタン2“ボタン1” → “ボタン1ボタン2”クリック → alert(“ボタン2が押された”)ボタン2生成、追加、イベント設定
3ボタン3… → “ボタン3”クリック → alert(“ボタン3が押された”)ボタン3生成、追加、イベント設定
4ボタン4… → “ボタン4”クリック → alert(“ボタン4が押された”)ボタン4生成、追加、イベント設定
5ボタン5… → “ボタン5”クリック → alert(“ボタン5が押された”)ボタン5生成、追加、イベント設定

解説ポイント(上級まとめ)

  1. 動的生成・更新
    • createElement / appendChild / innerHTML で DOMを動的に操作
  2. 条件付き更新
    • dataset 属性や score 条件に応じて class を付与
  3. イベント操作
    • addEventListener で動的要素にイベント付与
    • クロージャ・let の活用でループ内変数の保持
  4. ステップ表の活用
    • DOM状態・変数・条件判定・イベント登録を逐次確認できる
    • 初学者やデバッグ時に非常に有効
タイトルとURLをコピーしました