XML DOM свойство previousSibling

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

previousSibling Атрибут возвращает предыдущего同级 узла выбранного элемента (предыдущего узла в той же иерархии дерева).

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

Синтаксис

elementNode.previousSibling
Советы и заметки

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

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

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

Пример

Пример 1

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

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;
{}

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

Пример 2

Использование nextSibling для получения следующего элементного брата узла:

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;
{}

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