コース一覧
JavaScriptでWebページを動かす
要素を作って追加する

JavaScriptでWebページを動かす

DOM から要素を取得・更新・追加し、クリック・入力・フォーム送信に反応する処理を作る全 20 レッスン(411 分)のコースです。タイマーと localStorage も使い、最後は入力を保存できるひとことメモを仕上げます。用意された HTML/CSS を使うため、学習の中心は JavaScript です。

1
DOM のきほん
01. DOM とは何か15分
02. 要素を取得する20分
03. テキストを書き換える20分
04. class を付け外しする20分
05. 要素を作って追加する20分
06. 配列から一覧を描画する25分
07. つくる ギャラリーをデータ駆動にする30分
08. 第1章まとめクイズ10分
2
イベント処理
01. クリックに反応する18分
02. event オブジェクト20分
03. 入力欄の値を取る18分
04. フォーム送信を制御する20分
05. つくる ダークモード切替25分
06. つくる フォームの入力チェック25分
07. 第2章まとめクイズ10分
3
タイマーと総合制作
01. setTimeout と setInterval20分
02. localStorage で保存する20分
03. つくる ひとことメモウィジェット30分
04. 自由拡張30分
05. 完成と次のステップ15分

要素を作って追加する

createElement と append
解説

このレッスンで分かること

  • createElement はタグ名を渡すと、まだどこにも属していない新品の要素を返します
  • append で親に足すまで、つくった要素は画面に出ません

掴めるのは、すでに書いてある要素だけ

ここまでの 3 回は、HTML に書いてある要素を掴んで書きかえてきました。querySelector は、無いものは掴めません。趣味をもう 1 つ増やしたいと思っても、いまの道具では index.html を開いて li を手で書き足すしかありません。

その先へ進む道具が createElement です。タグ名を渡すと、そのタグの要素が 1 つできます。< や > は書きません。

JavaScript

const newHobby = document.createElement("li"); console.log(newHobby); // <li></li>

できたばかりの要素は、中身も class も無い空っぽの状態です。ここに設定を足していきます。

JavaScript

newHobby.className = "hobby-item"; newHobby.textContent = "パンを焼く";

class を className で付けているのは、まだ何の class も付いていない新品だからです。前回のとおり、既存の要素をいじるときは classList、新品に最初の class を与えるときは className が素直です。文字を入れるのは textContent で、ここも前々回のままです。新しく覚えるのは createElement の 1 つだけです。

つくっただけでは、画面に出ない

上の 3 行を書いても、画面には何も現れません。要素は変数の中に浮いているだけで、まだどの親にも属していないからです。ここが最初のつまずきどころで、しかもエラーは出ません。

親になる要素を掴んで append を呼ぶと、渡したものがその親のいちばん最後の子として入ります。

JavaScript

const hobbyList = document.querySelector(".hobby-list"); hobbyList.append(newHobby); // ここではじめて画面に出る

append は複数まとめて渡せますし、文字列もそのまま渡せます。入れ子の要素も、この 1 つで組み立てられます。

JavaScript

const row = document.createElement("li"); const label = document.createElement("strong"); label.textContent = "2027 年"; row.append(label, " Web の仕事に移りたい"); document.querySelector(".history-list").append(row);

古い記事でよく見る appendChild も同じ役目ですが、渡せるものが少なく、行数も増えます。

書き方渡せるもの一度に渡せる数
append要素と文字列何個でも
appendChild要素だけ1 つだけ

組み立ての順番は自由です。ただし、先に中身を組み立ててから最後に 1 回だけ親へ足すほうが、ブラウザが画面を描き直す回数が減ります。数が増えるほど差が出るので、この順番を習慣にしておくと得です。

同じ要素は、木の 1 か所にしか置けない

つくった要素を 2 つの親に append しても、コピーはされません。元の場所から引っこ抜かれて移動します。

JavaScript

const footerLinks = document.querySelector(".footer-links"); hobbyList.append(newHobby); // 趣味のリストに入る footerLinks.append(newHobby); // 趣味から消えて、こちらへ移る

同じ見た目を 2 か所に出したいときは、createElement からもう 1 つつくります。数をまとめてつくる場面では、この性質がそのまま効いてきます。

よくある間違い

  • append を書き忘れる — いちばん多い間違いです。エラーは出ず、ただ何も出てこないだけです。「動かない」ではなく「出てこない」ときは、まず append の行があるかを見ます
  • タグ名に記号を付ける — createElement("<li>") も createElement(".hobby-item") もエラーになります。渡すのはタグ名だけです
  • class を付ける先を間違える — 見た目が当たらないときは、class を付けた要素と CSS が狙っている要素がずれています。.hobby-item の指定は li に付けないと効きません

課題

  1. document.createElement("article") でカードをつくり、className を "work-card" にする
  2. h3 をつくり、textContent を "JavaScript のメモ帳" にする
  3. p をつくり、className を "work-meta"、textContent を "2026 年 / 0 回表示" にする
  4. h3 と p をカードに入れ、.work-list にカードを append する

ヒント

つくる、ととのえる、木に足す、の 3 手順です。足すまで画面には出ません

`createElement` に渡すのはタグ名だけです。`<article>` や `.work-card` を渡すとエラーになります

`append` は複数まとめて渡せます。`card.append(heading, meta)` の 1 行で 2 つ入ります

index.html
style.css
script.js
プレビュー

できているか

  • 作品カードが 4 枚になる
  • 4 枚目の見出しが入る
  • 4 枚目に work-meta の補足行がある
  • 補足行がカードの中に入っている
  • 前回の featured が残っている
エディタを読み込んでいます