I'm troubleshooting a problem where my text wasn't showing up in IE.
I've narrowed the problem down to creating a DOM node dynamically
(with $(html)) and then passing it to append(). In FireFox, append
will add the node as expected; but when passed a dynamically-created
node in IE, it does nothing. No error message is displayed; it just
silently fails, and no node is added to the page.

Here's a trivial example:

$('#myDiv').append($('<h2>'));

I put that code into the ready event, on a page with a div id="myDiv".
I also added some CSS to put a border on the h2, so I'd be able to see
whether it got added. Result: in FireFox, I can see the border,
proving that the h2 got added. In IE, nothing. No error.

If, instead, I find an existing <h2> using its selector (e.g. $
('#myH2')), and append() that (instead of a dynamically-created one),
then IE works fine; it moves that existing element into myDiv. It
appears to just be when a DOM element is dynamically created with $
(html), and then append()ed, that there's a problem.

Full example:

<html>
<head>
<style>h2{border:1px solid blue;}</style>
<script src="../vendor/jquery/jquery-1.2.6.js"></script>
<script>
$(function(){
  $('#myDiv').append($('<h2>'));
});
</script>
</head>
<body>
<div id="myDiv"></div>
</body>
</html>

Expected behavior: when you run this, you should get a blank page with
a 2px-tall blue line extending across the page. (This is the border
around the h2.) FireFox shows this expected behavior.

Actual behavior (IE6 on Windows): you get a blank page. The status bar
just says "Done" like usual, and does not show that any errors
occurred.

Is this a bug in jQuery? Or am I misunderstanding how $(html) is meant
to be used?

Reply via email to