世界の国560930 views
小学算数1195447 views
高校国語785873 views
小学社会308762 views
英語608453 views
教育148958 views
ヒストリア284663 views
中学社会667231 views
小学理科717454 views
高校物理158371 views
Help
Tools

English

innerHTML の使い方と注意点

innerHTML は、要素の中身を HTML 文字列として取得・設定するプロパティです。手軽に HTML を操作できますが、セキュリティには注意が必要です。

基本的な使い方

<div id="container">
  <p>こんにちは</p>
</div>
const container = document.getElementById('container');

// 取得(HTML タグも含む)
console.log(container.innerHTML); // "<p>こんにちは</p>"

// 設定(HTML として解釈される)
container.innerHTML = '<strong>太字</strong>のテキスト';

要素を追加する

既存の内容に追加するには += を使います。

container.innerHTML += '<p>追加された段落</p>';

ただし、+= を使うと既存のイベントリスナーが消えてしまうので注意が必要です。

innerHTML の特徴

HTML として解釈される

文字列に含まれるタグが実際の要素として作成される

既存の内容を置き換える

設定すると、既存の子要素はすべて削除される

実際に動かしてみよう

HTML
CSS
JavaScript
<div id="target">最初のコンテンツ</div>
<button id="replaceBtn">置き換え</button>
<button id="addBtn">追加</button>
#target {
  padding: 15px;
  background: #f5f5f5;
  border: 1px solid #ddd;
  min-height: 50px;
}
const target = document.getElementById('target');

document.getElementById('replaceBtn').addEventListener('click', () => {
  target.innerHTML = '<strong>置き換えられた</strong>コンテンツ';
});

document.getElementById('addBtn').addEventListener('click', () => {
  target.innerHTML += '<br><em>追加されたテキスト</em>';
});

セキュリティの注意(XSS)

ユーザー入力を innerHTML に直接入れると、スクリプトが実行される危険があります。

// 危険な例
const userInput = '<img src="x" onerror="alert(\'XSS\')">';
container.innerHTML = userInput; // XSS 攻撃が成功する

ユーザー入力を表示するときは textContent を使いましょう。

// 安全な例
container.textContent = userInput; // タグがエスケープされる

innerHTML と textContent の使い分け

innerHTML

HTML を埋め込みたいとき。ユーザー入力は危険

textContent

テキストだけを設定するとき。安全

パフォーマンス

大量の要素を追加するとき、ループ内で innerHTML += を繰り返すのは遅いです。

// 遅い
for (let i = 0; i < 1000; i++) {
  container.innerHTML += '<p>項目</p>';
}

// 速い(文字列を組み立ててから一度だけ設定)
let html = '';
for (let i = 0; i < 1000; i++) {
  html += '<p>項目</p>';
}
container.innerHTML = html;

innerHTML は便利ですが、セキュリティとパフォーマンスに気をつけて使いましょう。