Klonen von Elementen und Attribute setzen
Michael
- javascript
2 molily
Hallo an alle Nachtschwärmer,
ich schlage mich seit Stunden mit einem nicht nachvollziehbaren Fehler herum, kann mir da jemand weiterhelfen?:
Ich habe folgende Funktion, in der ich ein Element nebst Nachfolgen klone (in diesem Fall wäre es ein div) und ins Dokument wieder einfüge:
function klonen(elid) {
var el = document.getElementById(elid), vater = el.parentNode, klon = el.cloneNode(true);
var klasse = document.createAttribute("class");
klasse.nodeValue = "frageklon";
klon.setAttributeNode(klasse);
var klonID = document.createAttribute("id");
klonID.nodeValue = elid + "klon";
klon.setAttributeNode(klonID);
var stilstr = "position: absolute; left: 150px; top:150px;";
var stil = document.createAttribute("style");
stil.nodeValue = stilstr;
klon.setAttributeNode(stil); // hier wirft IE6 bei mir einen Fehler
vater.insertBefore(klon, el);
}
An der kommentierten Stelle wirft IE6 einen Fehler: "Mitglied nicht gefunden", die anderen beiden Attribute kann ich allerdings problemlos so setzen. Firefox führt den Code ohne Fehlermeldung aus und bringt das gewünschte Ergebnis.
Wo könnte hier das Problem liegen?
Vielen Dank schon mal und viele Grüße
Michael
Hallo,
var klasse = document.createAttribute("class");
klasse.nodeValue = "frageklon";
klon.setAttributeNode(klasse);
Das ist unnötig aufwändig und wird, wie du siehst, auch nicht unbedingt unterstützt.
Setze das class-Attribut direkt über die Eigenschaft className. Kein createAttribute usw. Das gilt eigentlich für das Setzen und Lesen aller Attribute. createAttribute soll gänzlich vermieden werden, über setAttribute könnte man diskutieren, nötig oder vortelihaft ist diese Langschreibweise jedenfalls nicht.
var klonID = document.createAttribute("id");
klonID.nodeValue = elid + "klon";
klon.setAttributeNode(klonID);
Setze das id-Attribut besser direkt über die Eigenschaft id.
var stilstr = "position: absolute; left: 150px; top:150px;";
var stil = document.createAttribute("style");
stil.nodeValue = stilstr;
klon.setAttributeNode(stil); // hier wirft IE6 bei mir einen Fehler
Setze Style-Eigenschaften über die Eigenschaft style, also einzeln die CSS-Eigenschaften: klon.style.position = "absolute" usw. Ein style-Attribut existiert bereits standardmäßig, wahrscheinlich stört sich MSIE daran.
Theoretisch möglich (DOM 2 CSS) wäre auch:
klon.style.cssText = "position: absolute; left: 150px; top:150px;";
Aber das werden einige Browser wohl nicht verstehen.
Mathias