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

浏览器兼容性

另见