setAttribute() Probleme im IE
setAttribute() kann in Verbindung mit dem Lieblings-Browser aller Webmaster, dem IE, zu Problemen führen da gewisse Attribute nicht richtig gesetzt werden bzw. gar nicht gesetzt werden. Das Problem tritt vorallem bei Elementen auf die komplett neu in Javascript generiert und in den bestehenden DOM Baum integriert werden und nicht schon im HTML Dokument existieren. Browser wie Opera oder die Mozilla Varianten haben damit natürlich kein Problem.
Ein Workaround ist das man statt setAttribute() direkt auf die Eigenschaft zugreift, also z.B. statt element.setAttribute(‘id’,'meinid’); verwendet man element.id = ‘meinid’;. Aber auch das kann der IE nicht immer umsetzen z.B. beim “name” Attribut macht der nämlich gar nichts. Interessanterweise funktioniert es wenn man bei setAttribute() statt “name” einfach “Name”, “NAME”, “nAmE”, etc. schreibt, was aber nicht Sinn der Sache sein soll. Zudem sollte das Attribut klein geschrieben sein.
Als Workaround verwende ich jetzt diese Methode:
// Create New IMG Element
try {
var element = document.createElement(‘<img name="myimage">’);
} catch (e) {
var element = document.createElement(‘img’);
element.setAttribute(‘name’,'myimage’);
}
Der IE unterstützt einen Alternativen Aufruf der createElement() Methode, man kann dem IE sofort ein Element mit Attributen angeben das er dann mit den Eigenschaften übernimmt. Im Code wird erst versucht das Element mit dem Alternativen Aufruf zu erzeugen, falls das Fehlschlägt (bei Opera und Mozilla) wird der Standard Aufruf verwendet und das Attribut im nachhinein hinzugefügt. Danach besitzt man ein Element “element” das ein korrektes name Attribut in IE, Opera und Mozilla besitzt.