Create an html5 page.
Make sure you have the script from remysharp.com/2009/01/07/html5-enabling-script/ added so that IE wi
The bug is in IE's implementation of innerHTML - for some reason it doesn't like the "unknown" elements being inserted via innerHTML - whereas DOM scripting is fine.
jQuery uses creates a holding div, and then drops in the markup you want to append in via innerHTML. IE now sees the unknown elements as two new broken elements, i.e. <article>content</article>
is seen as ARTICLE
, #text
, /ARTICLE
, caused by innerHTML borking.
Here's an example, check it out in IE and you'll see that innerHTML insertion method incorrectly reports 3 nodes inserted in the div: http://jsbin.com/olizu
Screenshot for those without IE: http://leftlogic.litmusapp.com/pub/2c3ea3e
I ran into this issue, too. The solution seems to be to use innerHTML on an element that's already attached to the document, then extract the created nodes. I created this li'l function to do that:
http://jdbartlett.github.com/innershiv/
HTML5 didn't exist when IE6 and 7 were developed.
Does the HTML5 shiv handle innerHTML
? IE very likely treats innerHTML
differently than DOM methods like createElement
, and reading the jQuery source (which I recommend), it seems your code is triggering innerHTML
instead of the DOM methods. You might try rewriting <section id="fail"></section>
as <section id="fail" />
(which at first glance should trigger DOM methods in the cleanup process) and see if it behaves differently. If so, you've identified a bug in jQuery and a limitation of the HTML5 shiv. If not, at least it's one possibility to cross off.
Hold your horses on the sarcasm there, everybody. Peeking at http://html5shiv.googlecode.com/svn/trunk/html5.js, the html5 shiv does successfully trick IE6/7 into doing a createElement().
In karbassi's case above, one would hope IE6/7 would first pay attention to the html5 shiv, then perform the jQuery append() as expected every time after that. It apparently doesn't do things in that order when appending to an append. This is handy to know.