jQuery dispone del metodo html() per leggere e scrivere il contenuto HTML di un elemento. Questo metodo, tuttavia, ha un limite: non restituisce l'elemento HTML su cui viene usato. Nello specifico, jQuery utilizza la proprietà innerHTML e non outerHTML, in quanto quest'ultima è proprietaria di Internet Explorer. Possiamo tuttavia ovviare al problema con facilità. Vediamo come.
Creiamo il seguente plugin:
(function($) {
    $.fn.extend({
        toHTMLString: function() {
            return $('<div>').append(this.clone()).remove().html();
        }
    });
})(jQuery);
Quindi, data la seguente marcatura:
<p id="test"><span>Test</span></p>
Possiamo usare il plugin come segue:
$('#run').click(function() {
    var htmlString = $('#test').toHTMLString();
    alert(htmlString); // <p id="test"><span>Test</span></p>
});
Potete visionare l'esempio finale in questa pagina.