HTML contenteditable mit Javascript localStorage speichern

Das contenteditable-Attribut macht mit wenigen Zeilen JavaScript aus einem HTML-Element einen Editor. Elemente mit contenteditable="true" sind sofort beschreibbar – ähnlich wie ein textarea-Feld. Anders als mit textarea-Feldern können Texte durch Fett, Farbe oder andere Merkmale hervorgehoben werden.

HTML content editable und Javascript local storage speichern

Contenteditable und Local Storage

Der Inhalt, den ein Benutzer in das HTML-Element setzt, ist allerdings flüchtiger Natur. Wenn die Seite neu aufgerufen wird, ist der frisch eingefügte Inhalt verschwunden. Erst Javascript macht den eingefügten Inhalt über das Schließen des Browserfensters hinaus haltbar.

Text im Memo bleibt beim Reload oder Schließen des Browserfensters erhalten, wird aber nicht auf dem Server gespeichert, sondern ähnlich wie Cookies im Local Storage des Browsers.


			
<div id="memo-pad">
   <pre id="memo" contenteditable="true" onkeyup="storeUserMemo(this.id);"></pre>
</div>

<div class="demotext">
   <span class="clear-button" onclick="clearLocal();">
      Local Storage löschen
   </span>
</div>

Local Storage – einfacher als Cookies

Damit der Inhalt des Memos bei einem Reload erhalten bleibt, müssen die Einträge gespeichert werden. In diesem Beispiel speichert Local Storage die Daten im Browsern des Benutzers.

Der Benutzer muss das Memo nicht speichern, sondern der Inline-Aufruf onkeyup="storeUserMemo(this.id);" speichert den Inhalt bei jedem Loslassen einer Taste. Javascript-Aufrufe als HTML-Attribut sind verrufen, aber hier halten sie das Beispiel überschaubar.

function storeUserMemo (id) {
   let memo = document.getElementById("memo").innerHTML;
   localStorage.setItem("userMemo",memo);
}

function getUserMemo () {
   if ( localStorage.getItem("userMemo")) {
      let memo;
      memo = localStorage.getItem("userMemo"); 
   } else {
      memo = "Schreib einen Roman oder eine Einkaufsliste oder nur ein paar Wörter!";
   }
   document.getElementById("memo").innerHTML = memo;
}

function clearLocal() {
   localStorage.clear(); 
   document.getElementById("memo").innerHTML = "Schreib einen Roman oder eine Einkaufsliste oder nur ein paar Wörter!";
}

// Initialisierung – mal sehen, ob schon ein Memo vorliegt
getUserMemo();

Local Storage ähnelt zwar Cookies, aber anders als Cookies gibt LocalStorage über Name/Wert-Paare einen direkten Zugriff auf die Einträge, während das Script den Cookie-String in Handarbeit auflösen muss.

Wenn der editierbare Bereich z.B. die Grundlage für einen webbasierten Kalender ist, könnte z.B. localStorage die Daten für eine gewisse Zeit im Browser des Benutzers speichern und sie dann in einen haltbareren Speicher übertragen. Wie lang ein Local Storage besteht, lässt sich nicht vorhersagen und zudem ist Local Storage auf 5 bis 10 MB je nach Browser beschränkt.

Editor mit Text-Auszeichnung

contenteditable – Events

Es gibt kein spezielles change-Event für Elemente mit Content Editable, aber das input Event feuert nicht nur bei input- und textarea-Elementen, sondern auch bei Elementen mit dem contenteditable-Attribut, und ist die beste Wahl für live-Änderungen.

Event Auslösen durch
beforeinput Vor einer Änderung
blur Wenn das Element den Fokus verliert
copy Wenn Text kopiert wird (Ctrl + C)
cut Wenn Text ausgeschnitten wird (Ctrl + X)
focus Wenn das Element aktiviert wird (anklicken oder Tab-Taste)
input Wenn sich der Inhalt ändert
keydown Wenn eine Taste gedrückt wird
keyup Wenn eine Taste losgelassen wird
paste Wenn der Benutzer Text einfügt (z. B. mit Ctrl + V)
Suchen auf mediaevent.de