Gestern gefunden, mal wieder simpel, aber dennoch doof. Die WebKit-Engine vergisst beim Hinzufügen von neuen Elementen in den DOM-Baum einige Attribute, mindestens aber display und die visibility.
Oder mit anderen Worten: Versteckt man mit jQuery ($.hide()) ein Element vor dem Hinzufügen in den DOM-Baum, so hat dies in allen Browsern ausser Safari eine Wirkung (nämlich versteckt). Versteckt man das Element erst nach dem Hinzufügen, dann funktionierts in allen.
Ich poste anbei ein Script, wo sich jeder davon überzeugen kann..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>jquery-safari-bug</title>
<script src="http://www.google.com/jsapi"></script>
<script>
// Load jQuery
google.load("jquery", "1.2.6");
// on page load complete..
google.setOnLoadCallback(function() {
var invisA = $('<span id="invisA">Element darf man nicht sehen</span>');
var invisB = $('<span id="invisB">Element darf man nicht sehen</span>');
// works on all browsers:
$('h1').append(invisA);
$(invisA).hide();
// works on all browsers except safari
$(invisB).hide();
$('h1').append(invisB);
});
</script>
</head>
<body id="jquery-safari-bug">
<h1>Ein Text</h1>
</body>
</html>