molily: IE < 8 und setAttribute/getAttribute

Beitrag lesen

Okay, es gibt ein paar Sachen zu beachten:

  • IE < 8 hat keine saubere Unterscheidung zwischen Attributen (attributes) und Eigenschaften (properties). getAttribute liefert daher nicht immer einen String – und hat dafür einen proprietären zweiten Parameter, der allerdings auch nicht wie erwartet funktioniert und einem auch nicht aus der Patsche hilft.

  • Das bedeutet beispielsweise: getAttribute('style') liefert dasselbe wie die style-Eigenschaft, nämlich ein CSSStyleDeclaration-Objekt. getAttribute('checked') liefert fälschlicherweise einen Boolean. getAttribute('value') liefert den aktuellen Wert anstelle den Anfangswert aus dem Markup. Usw.

  • Ein weiteres Resultat davon ist, dass bei setAttribute der gleiche camelCase wie bei den direkten Eigenschaften zu benutzen ist. Siehe <http://de.selfhtml.org/javascript/objekte/node.htm#set_attribute@title=Beachten Sie>. Z.B. getAttribute('htmlFor') anstelle standardgemäß getAttribute('for'). Das funktioniert natürlich nicht browserübergreifend.

  • Wie du auch sagst, akzeptieren on*-Attribute im IE < 8 keine Strings. Hier gilt, dass man Event-Handling immer funktional lösen sollte, entweder mit den on*-Eigenschaften oder in fähigen Browsern mit addEventListener. Abgesehen davon, dass es im IE < 8 ohnehin nicht direkt geht, gibt es keine regulären Vorteile für Event-Handler-Code in Strings.

  • setAttribute('type') ist im IE < 8 nicht bei bestehenden input-Elementen möglich, im IE 8 auch nur eingeschränkt. Strenggenommen ist das keine Standardverletzung, aber es ergeben sich teilweise Unterschiede zu anderen Browsern. input.setAttribute('name') ermöglicht nicht den Zugriff über den Namen über die elements-Collection bzw. getElementsByName (siehe Struppi, Jürgen). Man kann stattdessen das proprietäre document.createElement('<input type="..." name="...">') verwenden. Das sind jetzt beides keine Unterschiede zwischen Attributen und Eigenschaften, es geht m.W. auch nicht über die jeweiligen Eigenschaft.

Davon abgesehen ist getAttribute/setAttribute im IE meines Wissens harmlos (man ergänze mich). Das Ursprungsbeispiel setAttribute('id') ist also bspw. keine Fehlerquelle. Allerdings sind die obigen Problem ziemlich happig und diese Ausnahmen will man sich besser nicht merken, daher ist deinem Rat zuzustimen, getAttribute/setAttribute weitesgehend zu vergessen.

Mathias