DOM之文档修改更新

吴统威 on 编程语言 前端编程 HTML/CSS/JAVASCRIPT | 2016-04-15 12:10:39.0

DOM的修改更新可以使页面是动态的. 使用下面的方法描述, 构造新的页面元素且使他们处于活动状态.

上面DOM操作方法的描述定义在DOM LEVEL 中.


创建元素

下面的方法是在DOM创建一个新的元素节点: 

  • document.createElement(tag)

    创建新的DOM元素:

    var div = document.createElement('div')


  • document.createTextNode(text)

     创建新的DOM文本节点:

    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>

新的节点作为parentElem的最后一个子节点.

 一个空的DOM节点elem. 有什么不一样?

elem.appendChild(document.createTextNode(text))

比较


elem.innerHTML = text


  • parentElem.insertBefore(elem, nextSibling)

  • 在nextSibling元素之前,插入elem到parentElem.


下面代码演示了在第一个子节点之前插入一个新的节点:

代码名称

<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)

  •  通过elem替换parentELem子节点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>

 当有一个父元素的节点插入方法被调用时, 移除自动发生.



总结

创建方法:

  • document.createElement(tag) - 创建新的元素节点

  • document.createTextNode(value) - 创建新的文本节点

  • elem.cloneNode(deep) - 复制节点

通过父节点来插入和移除节点. 所有的都返回elem:

  • parent.appendChild(elem)

  • parent.insertBefore(elem, nextSibling)

  • parent.removeChild(elem)

  • parent.replaceChild(elem, currentElem)