Свойство nextSibling в XML DOM

Определение и использование

nextSibling Свойство возвращает узел, следующий за определенным узлом (следующий узел на том же уровне дерева).

Если такого узла не существует, то свойство возвращает null.

Синтаксис

nodeObject.nextSibling
Советы и заметки

Внимание:Firefox и большинство других браузеров считают пробелы или переводы строк текстовыми узлами, в то время как Internet Explorer этого не делает. Поэтому в следующем примере мы используем функцию для проверки типа узла следующего братского узла.

Элементный узел nodeType равен 1, поэтому если следующий братский узел не является элементным узлом, он переходит к следующему узлу и проверяет, является ли этот узел элементным узлом. Это продолжается до тех пор, пока не будет найден следующий同级 узел (должен быть элементным узлом). Таким образом, результат будет правильным во всех браузерах.

Совет:Для получения дополнительной информации о различиях между браузерами обратитесь к разделу DOM браузеров в учебнике XML DOM.

Пример

Пример 1

Ниже приведен код, который загружает "books.xml" в xmlDoc и получает следующий родственный узел первого <title> элемента:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
   if (this.readyState == 4 && this.status == 200) {
       myFunction(this);
   }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();
// Проверка, является ли следующий родственный узел элементом
function get_nextsibling(n) {
    var x = n.nextSibling;
    while (x.nodeType != 1) {
        x = x.nextSibling;
    }
    return x;
}
function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var x = xmlDoc.getElementsByTagName("title")[0];
    var y = get_nextsibling(x);
    document.getElementById("demo").innerHTML = x.nodeName + " = " +
    x.childNodes[0].nodeValue +
    "<br>Следующий родственный узел: " + y.nodeName + " = " +
    y.childNodes[0].nodeValue;
}

Попробуйте сами

Пример 2

Получение предыдущего родственного узла элемента:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myFunction(this);
    }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();
// Проверка, является ли предыдущий родственный узел элементом
function get_previoussibling(n) {
    var x = n.previousSibling;
    while (x.nodeType != 1) {
        x = x.previousSibling;
    }
    return x;
}
function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var x = xmlDoc.getElementsByTagName("author")[0];
    var y = get_previoussibling(x);
    document.getElementById("demo").innerHTML = x.nodeName + " = " + 
    x.childNodes[0].nodeValue +
    "<br>Предыдущий брат: " + y.nodeName + " = " + 
    y.childNodes[0].nodeValue;
}

Попробуйте сами