最新的Web开发教程
 

XML DOM - 导航节点


节点可以使用节点的关系进行导航。

×


导航DOM节点

经由节点之间关系的访问在节点树中的节点,通常被称为"navigating nodes"

在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;
}
试一试»

例子解释:

  1. 装载“ 的books.xml ”载入xmlDoc
  2. 获取第<book>元素
  3. 输出的父节点的节点名称"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;
}

//check if the first node is an element node
function get_firstChild(n) {
    var y = n.firstChild;
    while (y.nodeType != 1) {
        y = y.nextSibling;
    }
    return y;
}
</script>

</body>
</html>

输出:

title
试一试»

例子解释:

  1. 装载“ 的books.xml ”载入xmlDoc
  2. 使用第一个上get_firstChild功能<book>元素节点来获取是元素节点的第一个子节点
  3. 输出第一个子节点的节点名称是元素节点

例子

更多示例

lastChild()
本例使用lastChild()方法和一个自定义函数来获取节点的最后一个子节点

nextSibling()
本例使用nextSibling()方法和一个自定义函数来获取节点的下一个兄弟节点

previousSibling()
本例使用previousSibling()方法和一个自定义函数来获取一个节点的前一个兄弟节点