La propiedad parentNode
de un elemento le proporciona su nodo primario. Los elementos tienen una función insertBefore
que inserta un elemento antes de otro elemento de referencia (moviéndolo si ya está en otra parte del árbol). Y los nodos tienen un previousSibling
que le proporciona el nodo hermano anterior (que puede o no ser un elemento). Por lo tanto:
function swapDiv(elm) {
var previous = findPrevious(elm);
if (previous) {
elm.parentNode.insertBefore(elm, previous);
}
}
... donde findPrevious
se parece a esto:
function findPrevious(elm) {
do {
elm = elm.previousSibling;
} while (elm && elm.nodeType != 1);
return elm;
}
... onclick
donde sus atributos deben ser:
onclick="swapDiv(this);"
... aunque es posible que desee mire en su lugar el enganche al evento DOM2 (addEventListener
, o attachEvent
en IE).
Ligeramente OT, pero puedo recomiendo el uso de cualquiera de las varias bibliotecas disponibles que hacen la vida más fácil, como Prototype, jQuery, Closure o any of several others. De hecho, hubo un error en una versión anterior de esto porque había sido que desde que había tratado el DOM directamente. :-)
Y si se hace clic en div 1? –
si div es 1, entonces no se intercambian ... –
¿se intercambian solo los contenidos o los elementos completos? – karim79