修改节点
上面一篇我们学习了DOM节点的访问,下面来看看DOM节点的修改。
先获取要改变的节点。
- var my = document.getElementById('closer');
非常容易更改这个元素的属性。我们可以更改innerHTML.
因为innerHTML可以写入html,所以我们来修改html。
- my.innerHTML = '<em>my</em> final';
em标签已经成为dom树的一部分了。我们可以测试一下
- my.firstChild;
- my.firstChild.firstChild;
我们也可以通过nodeValue来改变值。
- my.firstChild.firstChild.nodeValue = 'your';
修改样式
大部分修改节点可能都是修改样式。元素节点有style属性用来修改样式。style的属性和css属性是一一对应的。如下代码
- my.style.border = "1px solid red";
CSS属性很多都有破折号("-"),如padding-top,这在javascript中是不合法的。这样的话一定要省略波折号并把第二个词的开头字母大写,规范如下。 margin-left变为marginLeft。依此类推
- my.style.fontWeight = 'bold';
我们还可以修改其他的属性,无论这些属性是否被初始化。
- my.align = "right";
- my.name = 'myname';
- my.id = 'further';
- my;
创建节点
为了创建一个新的节点,可以使用createElement和createTextNode.如果新建完成,可以用appendChild()把节点添加到DOM树中。
创建一个元素P,并把设置innerHTML属性
- var myp = document.createElement('p');
- myp.innerHTML = 'yet another';
元素P建完成了,就可以随意修改添加属性了
- myp.style.border = '2px dotted blue'
接下来可以用appendChild把新的节点添加到DOM树中的。
- document.body.appendChild(myp)
使用DOM的方法
用innerHTML方法的确很简单,我们可以用纯的dom方法来实现上面的功能。
- 新建一个文本节点(yet another)
- 新建一个段落
- 把文本节点添加到段落中。
- 把段落添加到body中
-
- var myp = document.createElement('p');
-
- var myt = document.createTextNode('one more paragraph')
- myp.appendChild(myt);
-
- var str = document.createElement('strong');
- str.appendChild(document.createTextNode('bold'));
-
- myp.appendChild(str);
-
- document.body.appendChild(myp);
-
cloneNode()
另一种新建节点的方法是,我们可以用cloneNode来复制一个节点。cloneNode()可以传入一个boolean参数。如果为true就是深度复制,包括他的子节点,false,仅仅复制自己。
首先获取要复制的元素。
- var el = document.getElementsByTagName('p')[1];
先不用深度复制。
- document.body.appendChild(el.cloneNode(false))
我们发现页面并没有变化,因为仅仅复制的是元素p。和下面的效果一样。
- document.body.appendChild(document.createElement('p'));
如果用深度复制,包括p下面所有的子节点都会被复制。当然包括文本节点和EM元素。
- document.body.appendChild(el.cloneNode(true))
insertBefore()
用appendChild,就是把元素添加到最后。而insertBefore方法可以更精确控制插入元素的位置。
- elementNode.insertBefore(new_node,existing_node)
实例
- document.body.insertBefore(
- document.createTextNode('boo!'),
- document.body.firstChild
- );
意思就是新建一个文本节点,把它作为body元素的第一个节点。
删除节点
要从DOM树删除一个节点,我们可以使用removeChild().我们来看看要操作的HTML
- <body>
- <p class="opener">first paragraph</p>
- <p><em>second</em> paragraph</p>
- <p id="closer">final</p>
-
- </body>
来看看下面代码,删除第二段
- var myp = document.getElementsByTagName('p')[1];
- var removed = document.body.removeChild(myp);
removed节点就是删除的节点。以后还可以用这删除的节点。
我们也可以用replaceChild()方法。这个方法是删除一个节点,并用另一个节点替代。当执行上个删除节点操作之后,结果如下
- <body>
- <p class="opener">first paragraph</p>
- <p id="closer">final</p>
-
- </body>
我们来看看replaceChild的使用。我们把上一个删除节点来替代第二个p
- var replaced = document.body.replaceChild(removed, p);
和removeChild返回一样。replaced就是移除的节点。现在结果为
- <body>
- <p class="opener">first paragraph</p>
- <p><em>second</em> paragraph</p>
-
- </body>