Ich habe eine Tabelle von Daten, die dynamisch mit Javascript generiert wird. Alle paar Minuten aktualisiert die Seite die Daten, indem sie eine Ajax-Anforderung abfeuern, die Daten vom Server abrufen und die Daten in der Tabelle ersetzen. Das ist ziemlich Standard, und der Tisch endet wie folgt aussehen:.IE Rendering von dynamischem Inhalt, bis ein Stylesheet geändert wird
Dies funktioniert gut, wenn ich die Daten durch das Entleeren der Tabelle erzeugen und das Hinzufügen allmählich die Zeilen wieder in jedoch diese Tabelle kann potenziell haben Tausende von Zeilen, und es kann möglicherweise so lange dauern, um die Tabelle zu generieren, die der Browser dem Benutzer ein "Dieses Skript dauert zu lange, um Fehler auszuführen". Also habe ich das behoben, indem ich die Tabellengenerierung in Stücke zerlegte und mit setInterval
ein bisschen nach dem anderen tat.
Das hat gut geklappt, aber weil die Tabelle eine Weile dauern kann, um vollständig generiert zu werden, habe ich versucht, clever zu sein und eine Pseudo-Doppelpufferung durchzuführen. Ich habe eine zweite Tabelle, deren display
auf none
eingestellt ist, um sie zu verstecken, und wenn ich die Tabelle neu generiere, füge ich die Zeilen der versteckten Tabelle ein Stück nach dem anderen hinzu. Auf diese Weise sind die vorhandenen Daten für den Benutzer sichtbar, bis die Neugenerierung der Tabelle abgeschlossen ist. An diesem Punkt ersetzen wir sie einfach durch unseren neuen Inhalt auf einmal. Dies funktioniert gut auf Firefox, Safari und Google Chrome
ich meinen Ersatz mit der folgenden Codezeile
$("#loading_area tbody").children().appendTo($("#unplanned tbody").empty());
tun. Aber auf IE, erhalte ich folgendes:
Diese Zeilen sind eigentlich nicht leer - der Inhalt ist, wenn ich horizontal genug bewegen:
Es scheint, dass die erste Spalte ist über 55.000 Pixel breit! Und hier ist der wirklich komische Teil: Der Inhalt wird wieder korrekt angezeigt, sobald ich irgendetwas über den Stil des Tisches ändere. Wenn ich also die Schriftfarbe auf grün ändere, wird IE die Tabelle sofort korrekt rendern.
Aber ich kann die Änderung nicht direkt vornehmen. Also, wenn ich sage
$("#unplanned").css("color", "green");
dann wird es nicht richtig rendern; Die Farbe ändert sich, aber die erste Spalte bleibt 55.000 Pixel breit. Aber wenn ich die Änderung direkt in das Stylesheet übertrage, gibt es die Tabelle korrekt wieder.
So landete ich dies durch die Festsetzung oben durch einen zufälligen Stil ändern, platzieren Sie den Rand des Expand/Collapse-Taste zwischen 1px
und 0px
Makeln, ich jedesmal, wenn ich die Tabelle fertig Auslegen und das funktionierte.
Mein Problem ist, dass, wenn ich versuche, die Seite zu drucken, die Zeilen leer aussehen, da der Seiteninhalt nicht ordnungsgemäß auf dem Drucker gerendert wird.
Also werde ich mehr Trickerei versuchen, wahrscheinlich nur umschalten, welche Tabelle angezeigt wird und ihre id
s oder was auch immer dies funktioniert zu tauschen. Meine Frage ist, was ist hier los?Dies scheint ein Fehler im IE zu sein; Ich benutze IE8, aber das Gleiche passiert bei IE6 und IE7. Ich möchte in Zukunft vermeiden, in diese Grube zu fallen, aber ich bin mir nicht sicher, was das verursacht, also bin ich mir nicht sicher, was ich vermeiden sollte. Jedes Licht, das irgendjemand auf dieses Licht werfen könnte, würde sehr geschätzt werden.
EDIT: Swapping, welche Tabelle angezeigt wird, macht das Rendering-Problem im Browser ohne einen Stylesheet-Hack verschwinden, aber das Problem mit dem Drucken ist immer noch da. Tatsächlich ist das Druckproblem auch dann vorhanden, wenn die Tabelle direkt erzeugt wird, ohne dass die Elemente angezeigt werden. Also bin ich definitiv verwirrt und nicht sicher, was ich tun kann, um dieses Problem verschwinden zu lassen. Ich muss möglicherweise eine separate, statische Seite nur zum Drucken erstellen, wenn ich das nicht herausfinden kann.
Ich hoffe, Sie bekommen eine Antwort auf diese eine - ich traf vor einem Jahr etwas auffallend ähnlich. Habe nie herausgefunden, was vor sich ging. Musste das, was ich tat, komplett neu starten, weil es stinkend war. IE – Matt