操作节点
// 向节点的子节点列表的末尾添加新的子节点
someNode.appendChild(newchild)
例子
下面的函数将在文档末尾插入一个新段:
代码如下 | 复制代码 |
function appendMessage (message) { var pElement = document.createElement("p"); var messageNode = document.createTextNode(message); pElement.appendChild(messageNode); document.body.appendChild(pElement); } |
// 在已有的子节点前插入一个新的子节点
someNode.insertBefore(newchild, refchild)
下面的下面片段可创建一个新的 <book> 节点,并在文档中的最后一个 <book> 元素前插入此节点:
代码如下 | 复制代码 |
//check if the last childnode is an element node function get_lastchild(n) { var x=n.lastChild; while (x.nodeType!=1) { x=x.previousSibling; } return x; } xmlDoc=loadXMLDoc("books.xml"); xmlDoc.documentElement.insertBefore(newNode,get_lastchild(x));
|
// 将某个子节点替换为另一个
someNode.replaceChild(new_node, old_node)
下面的代码片段可替换首个 <book< 元素中的 <title> 元素:
代码如下 | 复制代码 |
//check if first child node is an element node function get_firstchild(n) { var x=n.firstChild; while (x.nodeType!=1) { x=x.nextSibling; } return x; } xmlDoc=loadXMLDoc("books.xml"); //create a title element and a text node //replace the first child node with the new node //output all titles |
// 从子节点列表中删除某个节点
someNode.removeChild(node)
removeChild函数则可以删除文档中的指定节点。我们仍然使用一个例子来说明该函数的使用方法。
HTML代码
代码如下 | 复制代码 |
<div id="test"> <p>我是将要被删除的节点</p></div>实例JavaScript代码 <script type="text/javascript"> function remove(){ var test = document.getElementById("test"); var children = test.childNodes; for(i=0;i<children.length;i++) { test.removeChild(children[i]); } } </script> |
删除节点示例
我是将要被删除的节点
remove() ,点击这个按钮就会将上面div的子结点全部删除。
从上面的JS代码可以看到,使用removeChild的格式为:
父节点.removeChild(子结点)
removeChild的返回值
removeChild删除节点后会返回被删除节点的引用,这样当我们以后再想重新将它添加到文档中,或者是对它进行其它操作的时候就可以使用这个引用了。例如下面的代码段:
var removed = xxx.removeChild(xxxx);
则removed就是被删除的节点,可以在后面的代码中使用。
创建节点、appendChild,insertBefore,DOM节点查找、增加节点
代码如下 | 复制代码 |
<head> <title>新建网页</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="description" content="" /> <meta name="keywords" content="" /> <script type="text/javascript"> function showpic(pic){ var gallerynode = document.getElementById('gallery'); source = pic.getAttribute('href'); gallerynode.setAttribute('src',source); var text = pic.getAttribute('title'); //alert(text); var des = document.getElementById('des'); //alert(des.nodeValue); //返回 null //alert(des.childNodes[0].nodeValue); //该段才是获取文本节点的值 des.childNodes[0].nodeValue = text; } //创建原素,并用appendChild追加到元素后面 function t1(){ var pnode = document.createElement('p'); var text = document.createTextNode('给创建的文本节点增加内容,appendChild方法'); pnode.appendChild(text); var art = document.getElementById('art'); //alert(art); art.appendChild(pnode); } //利用insertBefore向元素前插入 function t2(){ var pnode = document.createElement('p'); var art = document.getElementById('art'); var zinode = art.children[0]; art.insertBefore(pnode,zinode);//第一个参数表示待插入的,第二个是定位的位置 } </script> <style type="text/css"> body{ background:#ccc;} .container{ width:800px; margin:0 auto;} *{ margin:0; padding:0;} ul{ list-style:none; padding:0; margin:0; width:300px; } ul li{background:#ccc; float:left; margin-right:10px; margin-bottom:10px; margin:30px 10px;} ul li a{ text-decoration:none; } #gallery { border:2px solid #ccc; display:block; clear:both;} #des{ border-bottom:1px solid red; width:400px; text-align:center; margin-bottom:10px; padding-bottom:5px; clear:both; } #art p{ width:200px; height:100px; background:red; margin-bottom:10px;} </style> </head> <body> <div class='container'> <h1>My Image Gallery</h1> <ul> <li><a href='images/pic001.jpg' onmouseover="showpic(this)" onclick='return false;' title='变道车全负责' alt='' >01</a></li> <li><a href='images/pic002.jpg' onmouseover="showpic(this)" onclick='return false;' title='一个萝卜一个坑,一个厕所一人蹲' alt='' >02</a></li> <li><a href='images/pic003.jpg' onmouseover="showpic(this)" onclick='return false;' title='驶入禁止入段,造成碰撞事故' alt='' >03</a></li> <li><a href='images/pic004.jpg' onmouseover="showpic(this)" onclick='return false;' title='障碍物路段,避让原则' alt='' >04</a></li> <li><a href='images/pic005.jpg' onmouseover="showpic(this)" onclick='return false;' title='狭窄山体路段,避让原则' alt='' >05</a></li> </ul> <p id='des'>这是一段描述文字</p> <img id='gallery' src='images/pic001.jpg' alt='' /> <div id='art'> <p>这是一个默认的P原素</p> </div> <p> <input type='button' value='增加节点' onclick='t1();' /> <input type='button' value='往前面插入节点' onclick='t2();' /> </p> <script type='text/javascript'> /*var des = document.getElementById('des'); //alert(document.getElementsByTagName('a')[0].getAttribute('title')); des.childNodes[0].nodeValue = document.getElementsByTagName('a')[0].getAttribute('title'); function autopic(){ var anode =document.getElementsByTagName('ul')[0].getElementsByTagName('a'); //alert(anode.length); for(var i =0 , len=anode.length ; i<len ; i++){ showpic(anode[i]); } } autopic();*/ </script> </div> </body> |
节点关系
// 父节点
someNode.parentNode
// 子节点
someNode.childNodes
// 子节点个数
someNode.childNodes.length
// 第一个子节点
someNode.firstChild
// 最后个子节点
someNode.lastChild
// 上一个同胞节点
someNode.previousSibling
// 下一个同胞节点
someNode.nextSibling
// 仅元素节点 IE9 / chrome / firefox
// 子节点个数
someNode.childElementCount
// 第一个子节点
someNode.firstElementChild
// 最后个子节点
someNode.lastElementChild
// 上一个同胞节点
someNode.previousElementSibling
// 下一个同胞节点
someNode.nextElementSibling