JavaScript & Kopierstil

8

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?

    
Stefan Steiger 18.01.2010, 17:10
quelle

2 Antworten

11
%Vor%

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'] :

%Vor%

(*: 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:

%Vor%
  

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.

    
bobince 18.01.2010, 18:05
quelle
9

Sie können ein DOM-Element mit seinem gesamten Inhalt (einschließlich der Attribute) mit .cloneNode (true) kopieren:

%Vor%

Dann ist clonedTr eine exakte Kopie der tr # id. Das "Wahr" bedeutet, dass Sie den Inhalt des Elements kopieren möchten.

    
Pikrass 18.01.2010 17:16
quelle

Tags und Links