I would say more about how the browser handles the .innerHTML property than the jQuery error (since jQuery calls innerHTML, which the browser will use to build / restore the DOM tree). See this example: http://jsfiddle.net/bhKCu/1/ (if it is a jQuery error that should behave the same no matter which browser uses innerHTML instead of $.html() on the right?).
From jQuery.html ():
This method uses the browser property innerHTML. Some browsers may not create a DOM that accurately replicates the provided HTML.
From jQuery 1.7.1:
html: function( value ) { if ( value === undefined ) { return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(rinlinejQuery, "") : null; // See if we can take a shortcut and just use innerHTML } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) && (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { value = value.replace(rxhtmlTag, "<$1></$2>"); try { for ( var i = 0, l = this.length; i < l; i++ ) { // Remove element nodes and prevent memory leaks if ( this[i].nodeType === 1 ) { jQuery.cleanData( this[i].getElementsByTagName("*") ); this[i].innerHTML = value; // HERE } } // If using innerHTML throws an exception, use the fallback method } catch(e) { this.empty().append( value ); } } else if ( jQuery.isFunction( value ) ) { this.each(function(i){ var self = jQuery( this ); self.html( value.call(this, i, self.html()) ); }); } else { this.empty().append( value ); } return this; },
Benno source share