javascript - 尝试在自身之前插入元素的结果

标签 javascript jquery dom

当我有 HTML 时:

<div>
    <p id="first">First paragraph!</p>
    <p id="second">Second paragraph!</p>
</div>

然后我运行脚本:

var second = $('#second');
$('#second').insertBefore(second);

结果是:

<div>
    <p id="first">First paragraph!</p>
</div>

我知道代码是荒谬的,但我正在编写代码,其中我插入的项目可能与我之前插入的项目相同。

有人能帮我理解为什么我会得到上面的结果吗? #second 发生了什么?

最佳答案

根据W3C DOM 3 spec :

Note: Inserting a node before itself is implementation dependent.

插入节点时,如果它已经在 DOM 中,则首先将其删除。所以你然后试图将它插入一个不再在 DOM 中的节点(本身)之前。您应该测试两个节点是否相同,如果相同,则不要插入。

编辑

执行上述操作的普通 js 函数是:

function doInsert(insertNode, beforeNode) {
  if (insertNode != beforeNode) {
    beforeNode.parentNode.insertBefore(insertNode, beforeNode);
  }
}

关于javascript - 尝试在自身之前插入元素的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151121/

相关文章:

Javascript 清除 DOM

javascript - 创建 Circles(div) 并将其附加到 div#canvas

javascript - 在 600 长度后检查最近的点 (".") 然后删除点后的所有文本

javascript - setTimeout导致内存泄漏

jquery - iframe 上的 jquery 键绑定(bind)延迟问题?

java - 节点列表未填充

javascript - 手动触发文档就绪

javascript - Vue.js:组件中的默认数据始终被 v-with 覆盖

javascript - jQuery Ajax 用于 btn-group bootstrap 的每个函数

JavaScript/jQuery 或每隔几秒更改文本的东西