对DOM的修改是,构建动态网页的关键。使用下面列举的方法,我们可以创建新的网页并且动态进行更改。
更多的DOM操作方法请查DOM1
使用以下方法在DOM中创建元素。
var div = document.createElement('div')
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>"
- elem.appendChild(document.createTextNode(text))
- 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 aselem.appendChild(newElem)
所有插入方法都会返回被添加的节点。
从DOM中删除节点,主要有两个方法:
两个方法都会返回被删除的节点,但是它可以再次插入到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>参考答案
创建一个程序,它又以下功能。
- 通过对话框提示,用户输入内容。(PRompt方法弹出对话框)
- 根据内容创建 LI 节点并添加到 UL 中
- 当ESC按下时,停止程序,否则一直运行。
参考答案
创建节点:
插入和删除节点:父节点调用方法,都返回elem。
parent.appendChild(elem)
parent.insertBefore(elem, nextSibling)
parent.removeChild(elem)
parent.replaceChild(elem, currentElem)
新闻热点
疑难解答