Sie können den Text innerhalb jedes HTML-Elements bearbeitbar machen, indem Sie das Attribut contenteditable hinzufügen.
<div contenteditable>
Hey, I'm like a textarea kinda now!
</div>
Ich würde nicht sagen, dass es dafür Hunderte von Anwendungsfällen gibt, aber es ist nett. Ein möglicher Anwendungsfall könnte ein Entwurf sein, bei dem das Bearbeiten von Inhalten direkt aus dem Entwurf heraus entweder für Sie oder für jemand anderen (einen Kunden?) nützlich ist, der den Text ändern muss.
Also, großartig, contenteditable. Jetzt kann jemand in den Text klicken und ihn bearbeiten.
Diese Änderungen sind nicht dauerhaft. Aktualisieren Sie die Seite, schauen Sie in einem anderen Browser nach oder was auch immer. Diese Bearbeitungen sind weg.
Sagen wir, Sie möchten es ein kleines bisschen besser machen und die Änderungen dauerhaft speichern. Sie versuchen hier nicht, ein CMS zu bauen oder die Daten über eine authentifizierte Verbindung zu einer Datenbank zu speichern oder so etwas. Sie möchten nur, dass die Änderungen am Text beibehalten werden, wenn die Seite aktualisiert wird.
Ein Weg ist, die Daten aus den Textänderungen, die Sie vornehmen, in localStorage zu werfen.
- Wenn Text bearbeitet wird (beim
blurdes Elements), speichern Sie die Daten mit einem Namespace und der
ID des Elements als Schlüssel inlocalStorage. - Wenn die Seite geladen wird, durchsuchen Sie
localStorageund prüfen Sie, ob es Schlüssel gibt, die mit Elementen auf der Seite übereinstimmen, und ersetzen Sie gegebenenfalls den Inhalt.
const editables = document.querySelectorAll("[contenteditable]");
// save edits
editables.forEach(el => {
el.addEventListener("blur", () => {
localStorage.setItem("dataStorage-" + el.id, el.innerHTML);
})
});
// once on load
for (var key in localStorage) {
if (key.includes("dataStorage-")) {
const id = key.replace("dataStorage-","");
document.querySelector("#" + id).innerHTML = localStorage.getItem(key);
}
}
Sehen Sie den Pen
localStorage + contenteditable von Chris Coyier (@chriscoyier)
auf CodePen.
Das erinnert mich an ein paar andere Dinge…
document.designMode = "on"ist wie eine Abkürzung, um jedes Element auf der Seite so zu behandeln, als hätte escontenteditable.- Mavo ähnelt diesem Konzept nur mit Authentifizierung, echten Datenspeicheroptionen und Bearbeitungs-UI.
- Wenn die Leistung ein Anliegen ist, soll KV storage eine schnellere asynchrone Version von
localStoragesein.
Wäre es möglich, diese Daten an einem dauerhafteren Ort zu speichern?
Was meinst du?
Sicher. Anstatt es in localStorage zu speichern, können Sie es entweder in einer .db-Datei oder einer Datenbank speichern. Oder in einer Sitzung. Hängt von Ihrem Zweck ab
Ja, aber dafür ist ein CMS (wie WordPress) da. In diesem Artikel geht es eher darum, ein Web-Notizbuch zu haben als ein CMS. Wenn Sie mit einem Kunden zusammenarbeiten und solche dynamischen Änderungen vornehmen könnten, könnten Sie Dinge feintunen und dann diese Änderungen für eine Folgesitzung dauerhafter einarbeiten.
TIL
document.designMode.Sie können es mit Ajax dauerhafter machen und an eine Datenbank senden.
In React muss "contentEditable" geändert werden, und es gibt eine Warnung
Sie können auch die Head- und Style/Script-Elemente mit
display: blockanzeigen und sie contenteditable machen, um CSS oder JavaScript im laufenden Betrieb zu ändern.Ich liebe es tatsächlich, das für Prototypen und POCs zu verwenden, die an Entwickler weitergegeben werden. Hilft, eine realistischere Demo für Kunden und Stakeholder zu erstellen.
Gibt es eine Möglichkeit, die Änderungen für andere sichtbar zu machen? (Ich arbeite nur mit HTML)