フロントエンドの用語一覧へ
このページの目次

innerHTMLとは?

読み方:innerhtml

最終更新:2026/08/18

3秒でわかる

要素の中身を HTML 文字列として読み書きするプロパティ。手軽な反面、外部由来の文字列を渡すと XSS の入口になります。

もう少し詳しく

どういうものか

DOM 要素が持つプロパティで、その要素の内側にある HTML をタグごと文字列として取り出したり、文字列を代入して中身を丸ごと差し替えたりできる。代入された文字列はブラウザによって解析され、実際の要素として組み立てられる。

タグを含む構造をまとめて作れるため、createElement を何度も呼ぶより記述が短くなる。

なぜ必要か

複数の要素からなるかたまりを作るとき、DOM API だけで書くと、要素を作り、属性を設定し、親に追加する手順が要素の数だけ並ぶ。innerHTML なら、できあがりの形をそのまま書ける。テンプレートリテラルと組み合わせると、繰り返しの描画が見通しよくなる。

具体例

const items = [
  { id: 1, name: "コーヒー", price: 480 },
  { id: 2, name: "紅茶", price: 420 },
];

// 中身を丸ごと差し替える
document.querySelector("#list").innerHTML = items
  .map((it) => `<li data-id="${it.id}">${it.name} ${it.price}円</li>`)
  .join("");

// 読み取ることもできる
console.log(document.querySelector("#list").innerHTML);

外部から来た値を混ぜる場合は、代入先を分けて textContent を使う。

const li = document.createElement("li");
li.textContent = userInput;   // タグとして解釈されない
list.appendChild(li);

つまずきやすいところ

最大の問題が XSS になる。利用者の入力や API の応答をそのまま innerHTML に渡すと、 のような文字列がスクリプトとして動く。