Element: insertAdjacentElement() 方法

Baseline 已廣泛支援

此功能已成熟,可跨多種裝置和瀏覽器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有瀏覽器中可用。

Element 介面的 insertAdjacentElement() 方法會在被呼叫的元素相對於其自身的位置插入一個給定的元素節點。

語法

js
insertAdjacentElement(position, element)

引數

position

一個表示相對於 targetElement 位置的字串;必須(不區分大小寫)匹配以下字串之一

  • 'beforebegin':在 targetElement 本身之前。
  • 'afterbegin':緊貼在 targetElement 內部,在其第一個子節點之前。
  • 'beforeend':緊貼在 targetElement 內部,在其最後一個子節點之後。
  • 'afterend':在 targetElement 本身之後。
element

要插入到樹中的元素。

返回值

被插入的元素,如果插入失敗則為 null

異常

SyntaxError DOMException

如果指定的 position 不是一個被識別的值,則丟擲此異常。

TypeError

如果指定的 element 不是一個有效的元素,則丟擲此異常。

位置名稱的視覺化

html
<!-- beforebegin -->
<p>
  <!-- afterbegin -->
  foo
  <!-- beforeend -->
</p>
<!-- afterend -->

注意: beforebeginafterend 位置僅在節點存在於 DOM 樹中並且有元素父節點時才有效。

示例

在之前和之後插入

在這個例子中,我們有一行方塊。使用者可以透過點選來選擇一個方塊:這會給方塊一個不同的邊框,以顯示其被選中。

如果一個方塊被選中,並且使用者按下了“插入到前面”或“插入到後面”按鈕,那麼程式碼會建立一個新的方塊,給它一個隨機的顏色,並將其插入到選中的方塊的前面或後面。

HTML

html
<p>
  Click colored box to select it, then use the first two buttons below to insert
  elements before and after your selection.
</p>

<section>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</section>

<button class="before">Insert before</button>
<button class="after">Insert after</button>
<button class="reset">Reset demo</button>

CSS

css
div {
  width: 50px;
  height: 50px;
  margin: 3px;
  border: 3px solid black;
  display: inline-block;
  background-color: red;
}

.selected {
  border-color: aqua;
}

JavaScript

js
let selectedElem;

// Function to select a new element
function selectElement(newSelection) {
  if (selectedElem !== newSelection) {
    if (selectedElem) {
      selectedElem.classList.remove("selected");
    }
    selectedElem = newSelection;
    newSelection.classList.add("selected");
  }
}

// Add click handlers that select the clicked element
const initElems = Array.from(document.querySelectorAll("section div"));
for (const initElem of initElems) {
  initElem.addEventListener("click", (e) => selectElement(e.target));
}

// Add click handlers to "beforeBtn" and "afterBtn"
// to insert a new element before/after the selected element
const beforeBtn = document.querySelector(".before");
const afterBtn = document.querySelector(".after");
beforeBtn.addEventListener("click", () => insertNewElement("beforebegin"));
afterBtn.addEventListener("click", () => insertNewElement("afterend"));

function insertNewElement(position) {
  function random() {
    return Math.floor(Math.random() * 255);
  }

  if (!selectedElem) {
    return;
  }

  const newElement = document.createElement("div");
  const randomColor = `rgb(${random(255)} ${random(255)} ${random(255)})`;
  newElement.style.backgroundColor = randomColor;
  newElement.addEventListener("click", (e) => selectElement(e.target));

  selectedElem.insertAdjacentElement(position, newElement);
}

// Reset the example
const resetBtn = document.querySelector(".reset");
resetBtn.addEventListener("click", () => window.location.reload(true));

結果

規範

規範
DOM
# dom-element-insertadjacentelement

瀏覽器相容性

另見