DOM 导航节点
-
定义和使用
通过节点之间的关系访问节点树中的节点,通常称为“导航节点”。在 XML DOM 中,节点关系被定义为节点的属性:- parentNode
- childNodes
- firstChild
- lastChild
- nextSibling
- previousSibling
下图说明了 books.xml 中节点树的一部分以及节点之间的关系: -
DOM-父节点
所有节点都只有一个父节点。 以下代码导航到<book>的父节点:
尝试一下function myFunction(xml) { var xmlDoc = xml.responseXML; var x = xmlDoc.getElementsByTagName("book")[0]; document.getElementById("demo").innerHTML = x.parentNode.nodeName; }
示例说明:- 将 “books.xml” 加载到 xmlDoc 中
- 获取第一个<book>元素
- 输出父节点 “x” 的节点名称
-
避免文本节点为空
Firefox 和其他一些浏览器会将空白或新行视为文本节点,而 Internet Explorer 则不会。在使用以下属性时,这会导致问题:firstChild,lastChild,nextSibling,previousSibling。为了避免导航到空的文本节点(元素节点之间的空格和换行符),我们使用了一种检查节点类型的函数:function get_nextSibling(n) { var y = n.nextSibling; while (y.nodeType! = 1) { y = y.nextSibling; } return y; }
上面的函数允许您使用get_nextSibling(node)而不是属性node.nextSibling。代码说明:元素节点的类型为1。如果同级节点不是元素节点,它将移动到下一个节点,直到找到元素节点为止。 这样,结果在 Internet Explorer 和 Firefox 中将是相同的。 -
获取第一个子元素
以下代码显示第一个<book>的第一个元素节点:
尝试一下<!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4 && xhttp.status == 200) { myFunction(xhttp); } }; xhttp.open("GET", "books.xml", true); xhttp.send(); function myFunction(xml) { var xmlDoc = xml.responseXML; var x = get_firstChild(xmlDoc.getElementsByTagName("book")[0]); document.getElementById("demo").innerHTML = x.nodeName; } //检查第一个节点是否是元素节点 function get_firstChild(n) { var y = n.firstChild; while (y.nodeType != 1) { y = y.nextSibling; } return y; } </script> </body> </html>
示例说明:- 将 “books.xml” 加载到 xmlDoc 中
- 在第一个<book>元素节点上使用get_firstChild函数来获取作为元素节点的第一个子节点
- 输出作为元素节点的第一个子节点的节点名
-
更多示例
lastChild() -本示例使用 lastChild() 方法和自定义函数来获取节点的最后一个子节点nextSibling() -本示例使用 nextSibling() 方法和自定义函数来获取节点的下一个同级节点previousSibling() -本示例使用 previousSibling() 方法和自定义函数来获取节点的上一个同级节点