いろは3002230 views
高校物理159249 views
高校化学2919622 views
高校国語787186 views
LaTeX960097 views
中学数学622753 views
数学講師2873614 views
小学理科718778 views
小学社会309339 views
りんご203078 views

insertAdjacentHTML の使い方

insertAdjacentHTML は、HTML 文字列を指定した位置に挿入する便利なメソッドです。innerHTML より柔軟で、既存の要素を壊さずに追加できます。

基本的な使い方

element.insertAdjacentHTML(position, html) で、位置と HTML 文字列を指定します。

const container = document.getElementById('container');
container.insertAdjacentHTML('beforeend', '<p>新しい段落</p>');

4つの挿入位置

position には4つの値が指定できます。

<!-- beforebegin -->
<div id="target">
  <!-- afterbegin -->
  既存のコンテンツ
  <!-- beforeend -->
</div>
<!-- afterend -->
位置説明
beforebegin要素の直前(兄弟として)
afterbegin要素の最初の子として
beforeend要素の最後の子として
afterend要素の直後(兄弟として)

実際に動かしてみよう

4つのボタンで、それぞれの位置に追加してみます。

HTML
CSS
JavaScript
<button data-pos="beforebegin">beforebegin</button>
<button data-pos="afterbegin">afterbegin</button>
<button data-pos="beforeend">beforeend</button>
<button data-pos="afterend">afterend</button>
<hr>
<div id="target" style="border:2px solid #333;padding:10px;">
  ターゲット要素
</div>
.added {
  background: #ffeb3b;
  padding: 4px;
  margin: 2px;
}
let count = 0;
document.querySelectorAll('button').forEach(btn => {
  btn.addEventListener('click', function() {
    count++;
    const pos = this.dataset.pos;
    const html = '<div class="added">' + pos + ' #' + count + '</div>';
    document.getElementById('target').insertAdjacentHTML(pos, html);
  });
});

innerHTML との違い

innerHTML

既存のコンテンツを完全に置き換える。イベントリスナーが消える

insertAdjacentHTML

既存のコンテンツを保持したまま追加。イベントリスナーも残る

セキュリティの注意

ユーザー入力をそのまま挿入すると XSS 攻撃を受ける可能性があります。

// 危険な例
const userInput = '<script>alert("XSS")</script>';
element.insertAdjacentHTML('beforeend', userInput);

ユーザー入力を含める場合は、エスケープ処理をするか、createElement + textContent を使いましょう。

関連メソッド

テキストを挿入する insertAdjacentText、要素を挿入する insertAdjacentElement もあります。

element.insertAdjacentText('beforeend', 'テキスト');
element.insertAdjacentElement('beforeend', newElement);