JavaScript的DOM_获取和操作层次节点
一、层次节点的概述
节点的层次结构可以划分为:父节点与子节点、兄弟节点这两种。当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点。
二、childNodes 属性
childeNodes 属性可以获取某一个元素节点的所有子节点,这些子节点包含元素子节点和文本子节点。
<script type="text/javascript"> window.onload = function(){ var box = document.getElementById('box'); alert(box.childNodes);//[object NodeList]返回的是一个数组,数组里面是当前元素节点所有的子节点列表 alert(box.childNodes.length); //3 获取子节点的个数 //3个子节点为:测试Div<em>倾斜</em>结尾 //第一个子节点为:测试Div,称为文本节点 //第二个子节点为:<em>倾斜</em>,称为元素节点 //第三个子节点为:结尾 ,称为文本节点 alert(box.childNodes[0]); //结果是:[object Text]表示一个文本节点对象 alert(box.childNodes[0].nodeType); //结果是:3 表示文本节点 alert(box.childNodes[0].nodeValue); //获取文本节点的文本内容 alert(box.childNodes[0].innerHTML); //当前本身就是文本,不能再获取里面的文本所以是undefined alert(box.childNodes[0].nodeName);// #text 文本节点没有标签名 } </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> </body>
通过判断节点类型来获取不同的输出
<script type="text/javascript"> window.onload = function () { var box = document.getElementById('box'); for (var i = 0; i < box.childNodes.length; i ++) { if (box.childNodes[i].nodeType === 1) { //判断是元素节点,输出元素标签名 alert('元素节点:' + box.childNodes[i].nodeName); } else if (box.childNodes[i].nodeType === 3) { //判断是文本节点,输出文本内容 alert('文本节点:' + box.childNodes[i].nodeValue); } } }; </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> </body>
在获取到文本节点的时候,是无法使用 innerHTML 这个属性输出文本内容的。这个非标准的属性必须在获取元素节点的时候,才能输出里面包含的文本
<script type="text/javascript"> window.onload = function () { var pox = document.getElementById('pox'); alert(pox); //pox.innerHTML='测试<strong>Pox</strong>'; pox.nodeValue = '测试Pox';//没有报错,但没有赋值成功 //pox.childNodes[0].nodeValue = '测试Pox'; pox.childNodes[0].nodeValue = '测试<strong>Pox</strong>'; } </script> </head> <body> <div id="box" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> <div id="pox">1</div> </body>
三、firstChild 和 lastChild 属性
firstChild 用于获取当前元素节点的第一个子节点,相当于 childNodes[0]
lastChild 用于获取当前元素节点的最后一个子节点,相当于 childNodes[box.childNodes.length - 1]
<script type="text/javascript"> window.onload = function () { var box = document.getElementById('box'); alert(box.childNodes[0].nodeValue); //获取第一个子节点 alert(box.childNodes[box.childNodes.length-1].nodeValue);//获取最后一个子节点 //上面的方法比较烦可以使用下面的额方法 alert(box.firstChild.nodeValue);//获取第一个子节点 alert(box.lastChild.nodeValue);//获取最后一个子节点 } </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> <div id="pox">1</div> </body>
四、ownerDocument 属性
ownerDocument 属性返回该节点的文档对象根节点,返回的对象相当于 document。
<script type="text/javascript"> window.onload = function () { var box = document.getElementById('box'); alert(box.ownerDocument); //[object HTMLDocument]//跟节点 文档对象 alert(box.document); //同上 alert(box.ownerDocument === document); //true,根节点 alert(box.ownerDocument.nodeName); //#document alert(box.ownerDocument.nodeType); //类型返回的是9 } </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> <div id="pox">1</div> </body>
五、parentNode、previousSibling、nextSibling 属性
parentNode 属性返回该节点的父节点
previousSibling 属性返回该节点的前一个同级节点
nextSibling 属性返回该节点的后一个同级节点。
<script type="text/javascript"> window.onload = function () { var box = document.getElementById('box'); alert(box.parentNode.nodeName); //获取父节点的标签名 结果是body alert(box.lastChild.previousSibling); //获取前一个同级节点即最后一个节点(也就是(结尾)的上个节点(<em>倾斜</em>) 是一个元素节点) alert(box.firstChild.nextSibling); //获取后一个同级节点 ((即测试Div)这个节点的下个节点 (<em>倾斜</em>) 是一个元素节点) alert(box.firstChild.nextSibling.nodeName);//结果是em } </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> </body>
六、attributes 属性
attributes 属性返回该节点的属性节点集合。
<script type="text/javascript"> window.onload = function () { var box = document.getElementById('box'); alert(box.attributes); //NamedNodeMap 也是个集合数组 集合中保存着属性节点列表 alert(box.attributes.length); //属性节点的个数 alert(box.attributes[0]); //[object Attr]最后一个属性节点对象 0代表的是最后一个是从后往前搜索的 alert(box.attributes[0].nodeType); //2,节点类型 alert(box.attributes[0].nodeValue); //最后一个属性的属性值 alert(box.attributes[0].nodeName); //最后一个属性的属性名称 alert(box.attributes['title']); //[object Attr],返回属性为 title 的节点 alert(box.attributes['title'].nodeValue); alert(box.attributes.getNamedItem('title')); //同上 } </script> </head> <body> <div id="box" class="pox" title="标题" style="color:#F00;" bbb="aaa">测试Div<em>倾斜</em>结尾</div> </body>