OuterHTML - чтение/запись DOM объекта

В JavaScript разрешено запись объекта только с помощью innerHTML, т.е. содержимого переданного объекта.

Прочитать же можно и сам объект с помощью outerHTML.

Когда же необходимо заменить весь текущий объект вместе с тегами приходится устраивать "танцы с бубном".

function getOuterHTML(d) {
    if (d.outerHTML) {
        return d.outerHTML;
    } else {
        var e = d.parentNode;
        var c = document.createElement(e.tagName);
        var g = document.createElement(d.tagName);
        e.replaceChild(g, d);
        c.appendChild(d);
        var f = c.innerHTML;
        e.replaceChild(d, g);
        return f;
    }
}

function setOuterHTML(f, e) {
    if (f.outerHTML) {
        f.outerHTML = e;
    } else {
        var g = document.createElement("div");
        g.innerHTML = e;
        var c = document.createRange();
        c.selectNodeContents(g);
        var d = c.extractContents();
        f.parentNode.insertBefore(d, f);
        f.parentNode.removeChild(f);
    }
}

.