zoukankan      html  css  js  c++  java
  • JS对文档进行操作

    对文档进行操作

     
    1. 创建节点
    2. 追加节点
    3. 删除节点
    4. 任务及例子
    5. 总结

    对DOM的修改是,构建动态网页的关键。使用下面列举的方法,我们可以创建新的网页并且动态进行更改。

    更多的DOM操作方法请查 DOM1

    创建节点

    使用以下方法在DOM中创建元素。

    1. document.createElement(tag):创建元素节点
      var div = document.createElement('div')
    2. document.createTextNode(text): 创建文本节点
      var textElem = document.createTextNode('Robin was here')

    createElement 方法是使用最广泛的, 但 createTextNode 方法也比较常用。它会创建文本节点并可以被追加到其他的元素里。

    对于一个空元素,创建一个文本节点并且把它追加到别的元素是比 innerHTML 效率高很多。

    但是innerHTML 比较简洁,并且支持标签的嵌套,因此他们俩都被广泛的使用。

    一个元素是可以被克隆的:

    • elem.cloneNode(true):深度拷贝(包含子节点)
    • elem.cloneNode(false):浅拷贝

    追加节点

    parentElem.appendChild(elem):添加elem子节点到parentElem节点。

    下面的代码将会演示如何创建元素并追加到 BODY 中的:

    复制代码
    <div>
      ...
    </div>
    <script>
      var div = document.body.children[0]
    
      var span = document.createElement('span')
      span.innerHTML = 'A new span!'
      div.appendChild(span)
    </script>
    复制代码

    新的元素会成为最后一个子节点。

    有一个空内容的元素节点 elem,下面两种操作方式有什么不同, text内容为 "<b>tag</b>"

    1. elem.appendChild(document.createTextNode(text))
    2. elem.innerHTML = text

    实现链接

    parentElem.insertBefore(elem, nextSibling):插入elem到parentElem的子节点nextSibling之前。

    演示:

    复制代码
    <div>
      ...
    </div>
    <script>
      var div = document.body.children[0]
    
      var span = document.createElement('span')
      span.innerHTML = 'A new span!'
      div.insertBefore(span, div.firstChild)
    </script>
    复制代码

    注意当 insertBefore的第二个参数为null时,功能会跟appendChild一样。

    elem.insertBefore(newElem, null) // same as
    elem.appendChild(newElem)

    所有插入方法都会返回被添加的节点。

    删除节点

    从DOM中删除节点,主要有两个方法:

    • parentElem.removeChild(elem):从parentElem子节点中删除elem元素
    • parentElem.replaceChild(elem, currentElem):从parentElem替换elem元素为currentElem

    两个方法都会返回被删除的节点,但是它可以再次插入到DOM里。

    如果你想移动某个元素,你没必要先删除它。

    elem.appendChild/insertBefore 会自动的从前一个位置删除elem。

    下例将会演示,移动最后一个元素到子节点的第一个位置。

    复制代码
    <div>First div</div>
    <div>Last div</div>
    <script>
      var first = document.body.children[0]
      var last = document.body.children[1]
      
      document.body.insertBefore(last, first)
    </script>
    复制代码

    任务及例子

    编写 insertAfter(elem, refElem)方法,插入 elem 节点到 refElem节点后。

    复制代码
    <div>Very</div>
    <div>Secret</div>
    
    <script>
      var elem = document.createElement('div');
      elem.innerHTML = 'Child';
    
      function insertAfter(elem, refElem) { 
    }
    insertAfter(elem, document.body.firstChild) insertAfter(elem, document.body.lastChild) </script>
    复制代码

    参考答案

    编写一个方法 removeChildren 移除该元素所有子节点。

    复制代码
    <div>Very</div>
    <div>Secret</div>
    <div>Children</div>
    
    <script>
      function removeChildren(elem) { 
      }
    
      removeChildren(document.body) // 执行后BODY标签变空  
    </script>
    复制代码

    参考答案

    创建一个程序,它又以下功能。

    1. 通过对话框提示,用户输入内容。(prompt方法弹出对话框)
    2. 根据内容创建 LI 节点并添加到 UL 中
    3. 当ESC按下时,停止程序,否则一直运行。

    参考答案

    总结

    创建节点:

    • document.createElement(tag)  创建新的标签
    • document.createTextNode(value)  创建指定内容的文本节点(注意创建文本内容时与innerHTML的区别)
    • elem.cloneNode(deep)  克隆元素节点
      • deep: true 深拷贝
      • deep: false 浅拷贝

    插入和删除节点:父节点调用方法,都返回elem。

    • parent.appendChild(elem)
    • parent.insertBefore(elem, nextSibling)
    • parent.removeChild(elem)
    • parent.replaceChild(elem, currentElem)
     
    分类: JavaScript
    标签: DOM
  • 相关阅读:
    Typora使用腾讯云图床
    2020年8月总结
    113 路径之和II
    103 二叉树的锯齿形层次遍历
    128 最长连续序列
    160 相交链表
    33 搜索旋转排序数组
    学习制作GitHub徽标
    105 从前序与中序遍历序列构造二叉树
    重新封装了layer.tips,自定义跟随弹窗
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4307819.html
Copyright © 2011-2022 走看看