Ich kopiere eine Tabellenzelle mit Javascript.
Es funktioniert gut, nur dass es den Stil nicht kopiert. Ich wollte wie unten kopieren, aber das hat nicht funktioniert. newCell.style = oldCell.style;
Also habe ich gedacht, dass ich es für meine Textausrichtung so kopieren muss: newCell.style.textAlign = oldCell.style.textAlign;
Das hat funktioniert, aber jedes Mal, wenn ich ein neues Style-Objekt hinzufüge, muss ich daran denken, es hier zu registrieren.
Also, mein Problem ist jetzt, wie kann ich den Stil durchlaufen und jedes Element darin kopieren?
Mit Chrome habe ich es geschafft:
%Vor%Aber das funktioniert nicht mit IE. Habe es nicht mit FF getestet, sondern nehme Chrom Kompatibilität an.
Gibt es eine Möglichkeit, die Stilelemente in IE zu durchlaufen? Oder gibt es eine bessere Möglichkeit, alle Stilelemente zu kopieren?
Verwende niemals eval
so (*). In JavaScript können Sie mit eckigen Klammern auf eine Eigenschaft zugreifen, deren Name in einer Zeichenfolge gespeichert ist. object.plop
ist identisch mit object['plop']
:
(*: Verwenden Sie niemals eval
, wenn Sie es helfen können. Es gibt nur ein paar sehr spezifische und seltene Gelegenheiten, wo Sie es brauchen.)
Gibt es eine Möglichkeit, die Stilelemente zu durchlaufen?
Das Objekt style
soll den DOM Level 2 unterstützen CSS CSSStyleDeclaration
Schnittstelle. Sie könnten die Regeln durchlaufen und sie auf ein anderes Element anwenden:
in IE?
Nein, IE unterstützt nicht die gesamte CSSStyleDeclaration-Schnittstelle und das obige funktioniert nicht. Es gibt jedoch einen einfacheren Weg ohne Looping, der wird funktioniert auch auf IE und den anderen Browsern:
%Vor%So einfach ist das! IE behält den CSS-Text nicht ganz so bei, wie er sollte, aber der Unterschied spielt keine Rolle für einfaches Inline-Kopieren.
Jedoch, wie Pikrass sagte (+1), wenn Sie ein ganzes Element und nicht nur die Stile kopieren, ist cloneNode
bei weitem die eleganteste Art das zu tun.
Tags und Links javascript css