2015-02-25 17 views
6

Ich schreibe einen benutzerdefinierten HTML-Editor. Der Benutzer kann einen gesamten HTML-Inhalt bearbeiten und die Änderungen werden im DOM aktualisiert. Wir haben die Möglichkeit, alle Änderungen rückgängig zu machen.Rückgängig dom Änderungen in JS

Logic:

Clone ein ganzer Container vor der Änderung zu machen und sie wieder anzuwenden.

Nachteile:

  1. eine große Variable in js Speicher.

  2. Und die Änderungen erneut anwenden, wird ein dom alles neu streichen.

Gibt es eine Möglichkeit, das gleiche zu erreichen ?.

+2

Wie Sie jquery verwenden, speichern Sie das geklonte Dom als String und verwenden Sie '.html()', um es erneut einzufügen. Auf diese Weise speichern Sie nur Strings statt Dom-Fragmente. – atmd

+0

Speichern von HTML-Strings ist nicht speicherintensiv und ist wahrscheinlich, was Sie sowieso an Server senden würden – charlietfl

+0

contentEditable Seiten unterstützen rückgängig machen Befehle, aber ich weiß nicht, wie gut die Browser-Unterstützung für das ist – the8472

Antwort

0

Verwenden Sie den Webspeicher die DOM Geschichte zu halten.

Stellen Sie sich vor, Sie möchten die letzten drei durchgeführten Aktionen rückgängig machen. Sie sollten es nicht im Arbeitsspeicher speichern, da Sie bei einer Seitenaktualisierung Informationen verlieren können. Und Sie wissen wirklich nicht, ob diese Aktion zum Speichern im Speicher verwendet wird.

Sie können den Webspeicher mit Datenkomprimierung verwenden, um die kleinste Datenmenge zu speichern.

2

Ihre Frage ist sehr nützlich. Ich weiß nicht, was die optimale Art ist, mit dieser Situation umzugehen, aber ich weiß, dass es Command Design Pattern gibt, die in diesem Fall funktionieren könnte. Mit Command Design Pattern können Sie Ereignisse rückgängig machen, die in Ihrem Programm gespeichert wurden. Nach meinem Verständnis besteht der Trick bei der Verwendung von Befehlsdesignmustern darin, dass Sie Funktionen haben müssen, die das Gegenteil bewirken, wenn Sie etwas rückgängig machen müssen. Zum Beispiel, wenn Sie add Funktionsergebnis rückgängig machen müssen, müssen Sie Subtraktionsfunktion haben. Für die Zeichenfunktion benötigen Sie eine Lösch-/Löschfunktion. Hier ist JavaScript example.

Verwandte Themen