DOM 节点操作

利用 DOM API 可以方便的添加和删除 HTML 元素节点。

利用 DOM API 可以方便的添加和删除节点。

创建新的 HTML 元素(节点)

要将新元素添加到 HTML DOM,您必须首先创建元素(元素节点),然后将其附加到现有元素。

<div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
  const para = document.createElement("p");
  const node = document.createTextNode("This is new.");
  para.appendChild(node);

  const element = document.getElementById("div1");
  element.appendChild(para);
</script>

说明:

  1. 此代码创建一个新 <p> 元素:

    const para = document.createElement("p");
    
  2. 要向 <p> 元素添加文本,您必须先创建一个文本节点。此代码创建一个文本节点:

    const node = document.createTextNode("This is a new paragraph.");
    
  3. 然后您必须将文本节点附加到 <p> 元素:

    para.appendChild(node);
    
  4. 最后,您必须将新元素附加到现有元素。

    先查找现有元素:

    const element = document.getElementById("div1");
    

    再添加孩子节点:

    element.appendChild(para);
    

insertBefore()

上面示例中的 appendChild() 方法将新元素附加为父元素的最后一个子元素。而 insertBefore() 方法可以将新元素节点插入到某个节点的前面。

使用 insertBefore() 插入节点:

<div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
  const para = document.createElement("p");
  const node = document.createTextNode("This is new.");
  para.appendChild(node);

  const element = document.getElementById("div1");
  const child = document.getElementById("p1");
  element.insertBefore(para, child);
</script>

删除现有的 HTML 元素

remove() 方法可以删除指定的元素,使用方法: element.remove()

使用 remove() 方法删除 HTML 元素:

<div>
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
  const elmnt = document.getElementById("p1");
  elmnt.remove();
</script>

remove() 方法在旧浏览器中不起作用,请参阅下面的示例了解如何使用 removeChild()

删除子节点

removeChild() 方法用于父节点删除一个指定的子节点。

对于不支持该 remove() 方法的浏览器,必须找到父节点使用 removeChild() 方法。

<div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
  const parent = document.getElementById("div1");
  const child = document.getElementById("p1");
  parent.removeChild(child);
</script>

还有一个常见的解决方法:找到要删除的子项,并使用其 parentNode 属性定位父节点,在父节点上指定 removeChild() 方法。

const child = document.getElementById("p1");
child.parentNode.removeChild(child);

替换 HTML 元素

replaceChild() 方法可以用指定的节点替换某个子节点, replaceChild() 方法接受 2 个参数:

  • 第 1 个参数新的元素节点
  • 第 2 个参数是要被替换的子节点

要将元素替换为 HTML DOM,请使用以下 replaceChild() 方法:

<div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
  const para = document.createElement("p");
  const node = document.createTextNode("This is new.");
  para.appendChild(node);

  const parent = document.getElementById("div1");
  const child = document.getElementById("p1");
  parent.replaceChild(para, child);
</script>