NotFoundError:事件监听器中insertBefore的DOM异常8

NotFoundError: DOM Exception 8 on insertBefore in event listener

本文关键字:DOM 异常 insertBefore 事件 监听器 NotFoundError      更新时间:2023-09-26

我有以下代码:

HTML:

<div id="tree">
  <ul class="root">
    <li class="add">+</li>
  </ul>
</div>
JavaScript:

window.onload = () => {
  let root = document.getElementsByClassName("root")[0];
  root.addEventListener("click", (e) => {
    if (e.target.classList.contains("add")) addNode(e);
    return false;
  }, false);
  function addNode(e) {
    let item = document.createElement("li");
    item.innerHTML = "new";
    e.target.parentNode.insertBefore(e.target, item);
  }
};

当我单击li时,我在插入之前的行上得到错误NotFoundError: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.。我已经检查了DevTools和一切似乎是一个正常的节点,我不知道为什么它不工作。

参数顺序不正确。必须先传递新节点:

e.target.parentNode.insertBefore(item, e.target);

查看MDN文档