IE innerHTML CSS bug
Today I encountered a bug that affects every version of Internet Explorer from IE6 all the way through IE9. Here’s what happens.
The Bug
- Set a Javascript string variable containing CSS styles (
<style>or<link>) followed by some HTML content, such as a<p>tag (in my application this happened via JSONP). - Add a
<div>node to the DOM - Insert the content from #1 into the
.innerHTMLproperty of the<div> - The content gets inserted, devoid of CSS styles.
<!-- these styles are ignored when inserted via innerHTML -->
<style>
p { color: blue; }
</style>
<p>Hello, how are you!</p>
The Solution
The simple solution was to put the other markup before the <style> or <link> tag. Bizarre.
<p>Hello, how are you!</p>
<!-- these styles are applied when inserted via innerHTML -->
<style>
p { color: blue; }
</style>
Because IE needs something that affects the layout before it will apply CSS styles in an innerHTML property, these will not work as style triggers:
<!-- a comment --><p></p>(or any other empty block-level HTML tag)
Written on October 12, 2011