8.5 動的な要素の追加と削除
JavaScript を使って、ページに新しい要素を追加したり、既存の要素を削除したりする方法を学びます。
8.5.1 createElement, appendChild, removeChild
createElement
新しい HTML 要素を作成します。
appendChild
作成した要素を、親要素の子として追加します。
removeChild
指定した子要素を削除します。
// 新しい要素を作成
const newDiv = document.createElement("div");
newDiv.textContent = "新しい要素です";
// body に追加
document.body.appendChild(newDiv);
// 削除
document.body.removeChild(newDiv);
8.5.2 動的リストを作成するプログラム
ソースフォルダ:public/ch08
ファイル名:dynamic-list.js
➢ dynamic-list.html
前の項で作った ch08/event-handler.html をコピーし、ch08 にペーストしてください。その際に、ファイル名を dynamic-list.html に変更します。ファイル内の event-handler.html や event-handler.jsの記述も、dynamic-list.html や dynamic-list.js に修正します。さらに、ファイル内の記述を以下のように修正します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>JavaScriptの練習: dynamic-list.jsを実行中</title>
<script src="dynamic-list.js" defer></script>
</head>
<body>
<h1>TODOリスト</h1>
<input type="text" id="todoInput" placeholder="タスクを入力">
<button id="addBtn">追加</button>
<ul id="todoList"></ul>
</body>
</html>
➢ dynamic-list.js
// dynamic-list.js
document.addEventListener("DOMContentLoaded", () => {
// 要素を取得
const input = document.querySelector("#todoInput");
const addBtn = document.querySelector("#addBtn");
const todoList = document.querySelector("#todoList");
// タスクを追加する関数
function addTodo() {
const task = input.value;
// 入力が空の場合は処理しない
if (task === "") {
alert("タスクを入力してください");
return;
}
// 新しい li 要素を作成
const li = document.createElement("li");
li.textContent = task;
// 削除ボタンを作成
const deleteBtn = document.createElement("button");
deleteBtn.textContent = "削除";
// 削除ボタンがクリックされたときの処理
deleteBtn.addEventListener("click", function() {
todoList.removeChild(li);
});
// li に削除ボタンを追加
li.appendChild(deleteBtn);
// ul に li を追加
todoList.appendChild(li);
// 入力フィールドをクリア
input.value = "";
}
// 追加ボタンのクリックイベント
addBtn.addEventListener("click", addTodo);
// Enter キーでも追加できるようにする
input.addEventListener("keydown", function(event) {
if (event.key === "Enter") {
addTodo();
}
});
}); // DOMContentLoaded ここまで
実行結果
入力フィールドにタスクを入力して「追加」ボタンをクリックすると、リストに新しいタスクが追加されます。各タスクの横には「削除」ボタンがあり、クリックするとそのタスクが削除されます。

解説
4 行目から 6 行目で、必要な要素を取得しています。
4: const input = document.querySelector("#todoInput");
5: const addBtn = document.querySelector("#addBtn");
6: const todoList = document.querySelector("#todoList");
9 行目から 39 行目で、タスクを追加する addTodo 関数を定義しています。
19 行目と 20 行目では、新しい li 要素を作成し、入力されたタスクをテキストとして設定しています。
19: const li = document.createElement("li");
20: li.textContent = task;
23 行目と 24 行目では、削除用のボタン要素を作成しています。
23: const deleteBtn = document.createElement("button");
24: deleteBtn.textContent = "削除";
27 行目から 29 行目では、削除ボタンがクリックされたときに、その li 要素を todoList から削除する処理を定義しています。
27: deleteBtn.addEventListener("click", function() {
28: todoList.removeChild(li);
29: });
32 行目では、作成した削除ボタンを li 要素の子として追加しています。
32: li.appendChild(deleteBtn);
35 行目では、完成した li 要素を ul(todoList)の子として追加しています。
35: todoList.appendChild(li);
38 行目では、タスクを追加した後、入力フィールドを空にしています。
38: input.value = "";
42 行目と 45 行目から 49 行目では、ボタンクリックと Enter キーの両方で addTodo 関数が実行されるようにしています。
42: addBtn.addEventListener("click", addTodo);
45: input.addEventListener("keydown", function(event) {
46: if (event.key === "Enter") {
47: addTodo();
48: }
49: });
