NonDocumentTypeChildNode.previousElementSibling

La propiedad de sólo lectura NonDocumentTypeChildNode.previousElementSibling retorna el Element predecesor inmediato al especificado dentro de la lista de hijos de su padre, o bien null si el elemento especificado es el primero de dicha lista.

Sintaxis

prevNode = elementNodeReference.previousElementSibling;

Ejemplo

<div id="div-01">Aquí está div-01</div>
<div id="div-02">Aquí está div-02</div>
<li>Esto es un elemento de lista</li>
<li>Esto es otro elemento de lista</li>
<div id="div-03">Aquí esta div-03</div>

<script>
  var el = document.getElementById('div-03').previousElementSibling;
  document.write('<p>Hermanos de div-03</p><ol>');
  while (el) {
    document.write('<li>' + el.nodeName + '</li>');
    el = el.previousElementSibling;
  }
  document.write('</ol>');
</script>

Este ejemplo muestra lo siguiente en la página cuando carga:

Hermanos de div-03

   1. LI
   2. LI
   3. DIV
   4. DIV

Polyfill para Internet Explorer 8

Esta propiedad no está soportada con anterioridad a IE9, así que puede utilizarse el siguiente fragmento para añadri el soporte a IE8:

// Source: https://github.com/Alhadis/Snippets/blob/master/js/polyfills/IE8-child-elements.js
if(!("previousElementSibling" in document.documentElement)){
    Object.defineProperty(Element.prototype, "previousElementSibling", {
        get: function(){
            var e = this.previousSibling;
            while(e && 1 !== e.nodeType)
                e = e.previousSibling;
            return e;
        }
    });
}

Especificaciones

Especificación Estado Observaciones
DOM
La definición de 'NonDocumentTypeChildNode.previousElementSibling' en esta especificación.
Living Standard Dividió el interfaz ElementTraversal en ChildNode, ParentNode, y NonDocumentTypeChildNode. Este método queda ahora definida en el primero.
Los interfaces Element y CharacterData (en-US) implementaron la nueva interfaz.
Element Traversal Specification
La definición de 'ElementTraversal.previousElementSibling' en esta especificación.
Obsolete Añadida su definición inicial al interfaz puro ElementTraversal y lo usa en Element.

Compatibilidad con navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Prestación Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte básico (en Element) 4 3.5 (1.9.1) 9 9.8 4
Soporte en CharacterData (en-US) 29.0 25 (25) [1] Sin soporte 16.0 Sin soporte
Prestación Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte básico (en Element) (Yes) 1.0 (1.9.1) (Yes) 9.8 (Yes)
Soporte en CharacterData (en-US) (Yes) 25.0 (25) Sin soporte 16.0 Sin soporte

[1] Firefox 25 también añadía esta propiedad a DocumentType (en-US), y fue eliminada en Firefox 28 debido a problemas de compatibildad.

Ver también