setAttributeNode() - Probleme mit divs und dem IE
Julian
- javascript
Hallo liebe Leute,
Ich habe ein kleines Problem mit dem dynamischen einfügen von divs im IE.
Folgender Code funktioniert problemlos im Firefox aber nicht im IE (Windows, Version 6.x)
var punkt = document.createElement("div");
var attribut = document.createAttribute("style");
attribut.nodeValue = "background-color: black; width: 20px; height: 30px;";
document.getElementById("rahmen").appendChild(punkt);
document.getElementsByTagName("div")[1].setAttributeNode(attribut);
der Explorer gibt als Fehler "Mitglied nicht gefunden" aus.
Setze ich nun aber statt ...createElement("div")... ...createElement("hr")...
ein und ändere die Attribute entsprechend ab meckert der IE nicht mehr und gibt eine Trennlinie aus.
Hat jemand eine Ahnung woran das liegen könnte?
mfg Julian
Hi,
na ja, laut Self-HTML funktioniert createAttribute beim Internet-Explorer nicht.
Ich habe mir eine kleine setStyle-Funktion gebaut, die unterscheidet:
if (document.createAttribute)
...
else
element.style.backgroundColor = ...
So nach dem Schema etwa, also über das Style-Object.
MfG
Rouven
Hallo Rouven,
na ja, laut Self-HTML funktioniert createAttribute beim Internet-Explorer nicht.
klingt logisch, hab ich wohl übersehen.
Aber:
var punkt = document.createElement("hr");
var attribut = document.createAttribute("width");
attribut.nodeValue = "30";
document.getElementById("rahmen").appendChild(punkt);
document.getElementsByTagName("hr")[0].setAttributeNode(attribut);
funktioniert im IE perfekt
mfg Julian
Hallo Rouven,
Danke übrigens für deine (sehr-) schnelle Antwort.
Ich hab mir deinen Hinweis auf style.setAttribute
mal zu Gemüte geführt. Ist in meinem Fall sowieso besser geeignet als im DOM-Baum rumzupfuschen. Danke auch hierfür.
mfg Julian
Hallo,
Ich habe mir eine kleine setStyle-Funktion gebaut, die unterscheidet:
if (document.createAttribute)
...
else
element.style.backgroundColor = ...
Wieso auch immer diese Unterscheidung notwendig ist - die Methode über createAttribute ist umständlich und wie gesagt nicht browserübergreifend. Sie ist beim Setzen von Styles weitesgehednd unnötig, der Zugriff über style sollte ausreichen.
Mathias
Stimmt schon, sagen wir meine Methode ist eigentlich auch kein setStyle sondern ein setAttribute und filtert noch auf einiges mehr.
MfG
Rouven
var punkt = document.createElement("div");
var attribut = document.createAttribute("style");
attribut.nodeValue = "background-color: black; width: 20px; height: 30px;";
document.getElementById("rahmen").appendChild(punkt);
document.getElementsByTagName("div")[1].setAttributeNode(attribut);
createAttribute und setAttribute sind hier absolut überflüssig, da ein DIV Element diese Attribute bereits hat. D.h. du versuchst hier ein Browserinternes Attribut zu überschreiben was offensichtlich nit jeder Browser mag. Zumal nicht in dieser Form, da ein Style ja keinen string als Attribute hat, sonder widerrum Attribute.
Mach es einfach so:
var punkt = document.createElement("div");
punk.style.backgroundColor = 'black';
punk.style.width = '20px';
punk.style.height = '30px;';
Das funktioniert immer.
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/)