Element nach Änderung von Styles neu rendern

nhoj

Mitglied
Ich versuche derzeit einige Styles eines Elements per Javascript zu ändern, jedoch werden die Änderungen nur bedingt angezeigt.

Verwendeter Browser: Firefox (aktuelle Version)

Code mit dem es NICHT funktioniert:
Code:
	var styles = elem.getStyles('background', 'border', 'font-family', 'font-size', 'font-weight', 'color', 'margin', 'padding');
	for (var style in styles) {
		editorInstance.EditorDocument.body.style[style] = styles[style];
	}

Code mit dem es funktioniert:
Code:
	var styles = elem.getStyles('background', 'border', 'font-family', 'font-size', 'font-weight', 'color', 'margin', 'padding');
	for (var style in styles) {
		alert(style+' => '+styles[style]);
		editorInstance.EditorDocument.body.style[style] = styles[style];
	}

Die Frage ist nun, gibt es eine Möglichkeit ein neu rendern des Elements zu erzwingen oder welche Auswirkungen hat "alert" darauf?
 
Moin,

versuche mal, vor der Schleife den body auf display:none zu setzen, und danach wieder auf display:block...oder alternativ seine Höhe davor zu verändern und danach wieder auf 100% zurückzusetzen.
 
Und das gänzliche Entfernen der style-Attribute vor der Neuzuweisung, hast du das schon mal probiert? :-(

Der alert...bringt der das, was du dort erwartest(ich meine die korrekte Info über den Style?)

Welche Styles ignoriert er denn?
 
Naja das alert bewirkt im FF nur eine Zeitvverzögerung bis das eigentliche Script weiter ausgeführt wird , teste es mal im Opera und anderen Browsern. Im Opera blockt bei einen alert nicht die Ausführung von Scripten.

Wichtig wäre zu wissen ob im Objekt welches du reinschubst alles korrekt steht und was drinnen steht. Aber wenn es nach dem man die Alertbox geschlossen hat funktioniert würde ich behaupten das das Script zu schnell ist.

Eventuell hilft auch das hier :

Code:
var b = editorInstance.EditorDocument.getElementsByTagName("body")[0];

// das er das body element nicht immer neu ranholen muss sondern gleich darauf zeigt
for(var xyz = styles ) {
    b.style[xyz] = styles[xyz];
}

// oder knall mal ein eval darum eventuell hilft das ja
for(var xyz = styles ) {
    eval("b.style."+xyz+" = styles."+xyz);
}

Wenn alle Stricke reisen nimm eine rekursive Funktion die sich , solange noch weitere Element enthalten sind , selbler aufruft mittels eines Timeouts meist reichte da 1 Millisekunde wenngleich das auch eine naja Lösung ist.
 

Neue Beiträge

Zurück