jQuery + IE = *würg*

Das Javascript-Framework jQuery hat einen kleinen, aber entscheidenen Bug – bzw. der Internet Explorer einschließlich 7 (8 ungetestet). Da aber beim Letzteren eh schon Hopfen und Malz verloren ist, schiebe ich es auf ein Fehlverhalten des entsprechenden jQuery-Core-Modules.

Um dynamisch ein DIV-Element zu erzeugen, macht man in jQuery mit dem Core-Constructor folgendes:

var jQueryElement = jQuery(‚<div></div>‘).text(‚Text‘);

Natürlich kann man auch direkt „<div/>“ verwenden.

Dies erzeugt ein jQuery-Element, in welchem das DOM-Element verpackt ist. Als Textknoten wird wie erwartet „Text“ gespeichert. Davon kann man sich überzeugen, indem man ein

jQueryElement.text()

ausführt.

Auch wenn ich auf Anhieb in der offiziellen Dokumention (jQuery API) kein Beispiel zeigen kann, ist folgender Code prinzipiell auch erlaubt:

var jQueryElement = jQuery(‚<div>‘).text(‚Text‘);

Das „kaputte“ XML bzw. HTML bzw. XHTML wird automatisch repariert.

Denkste – zwar funktioniert das auf allen Browsern, aber nicht im Internet Explorer. Tatsächlich scheint der Internet Explorer ausgerechnet hier nur valides XML zu erwarten.

Im IE erwartet uns das:

jQuery(‚<div>‘).text(‚Text‘).length == 0

Währenddessen uns Firefox korrekterweise

jQuery(‚<div>‘).text(‚Text‘).length == 1

eine 1 zurückgibt.

Korrekt in beiden:

jQuery(‚<div/>‘).text(‚Text‘).length == 1