中学数学621573 views
小学理科717454 views
高校倫理1433840 views
中学社会667231 views
高校国語785873 views
いろは2988729 views
小学算数1195447 views
ヒストリア284663 views
Computer365450 views
高校日本史189916 views
Help
Tools

English

insertBefore で特定の位置に挿入する

insertBefore は、指定した要素の直前に新しい要素を挿入するメソッドです。appendChild が末尾に追加するのに対し、任意の位置に挿入できます。

基本的な使い方

parent.insertBefore(newNode, referenceNode) で、referenceNode の直前に newNode を挿入します。

<ul id="list">
  <li id="item1">項目1</li>
  <li id="item2">項目2</li>
  <li id="item3">項目3</li>
</ul>
const list = document.getElementById('list');
const item2 = document.getElementById('item2');

const newItem = document.createElement('li');
newItem.textContent = '新しい項目';

list.insertBefore(newItem, item2);
// 結果: 項目1 → 新しい項目 → 項目2 → 項目3

referenceNode が null の場合

参照ノードが null だと、末尾に追加されます。appendChild と同じ動作になります。

list.insertBefore(newItem, null); // 末尾に追加

先頭に追加する

最初の子要素を参照ノードにすれば、先頭に追加できます。

const list = document.getElementById('list');
const newItem = document.createElement('li');
newItem.textContent = '先頭に追加';

list.insertBefore(newItem, list.firstChild);

実際に動かしてみよう

HTML
CSS
JavaScript
<ul id="list">
  <li>項目1</li>
  <li id="target">項目2(この前に挿入)</li>
  <li>項目3</li>
</ul>
<button id="btn">項目を挿入</button>
#list li {
  padding: 4px;
}
.new {
  background: #ffeb3b;
}
let count = 0;
document.getElementById('btn').addEventListener('click', function() {
  count++;
  const newItem = document.createElement('li');
  newItem.textContent = '挿入された項目 ' + count;
  newItem.className = 'new';
  
  const list = document.getElementById('list');
  const target = document.getElementById('target');
  list.insertBefore(newItem, target);
});

insertBefore の注意点

親要素で呼ぶ

insertBefore は親要素のメソッドです。挿入したい要素自身ではなく、その親要素で呼び出します。

参照ノードは子要素

参照ノードは、その親要素の直接の子要素である必要があります。孫要素を指定するとエラーになります。

より新しい API:before と after

現代の JavaScript では、beforeafter メソッドも使えます。

const target = document.getElementById('target');

const newItem = document.createElement('li');
newItem.textContent = '新しい項目';

target.before(newItem);  // target の前に挿入
target.after(newItem);   // target の後ろに挿入

こちらのほうが直感的ですが、IE には対応していません。