contenteditable markierten text speichern und wiederherstellen
Stieß ich auf diesen Beitrag, der zeigt, 2 Funktionen, wie das speichern und wiederherstellen, den ausgewählten text aus einem contenteditable div. Ich habe die unten div eingestellt als contenteditable und die 2 Funktion aus dem anderen post. Wie kann ich diese Funktionen verwenden, speichern und wiederherstellen, den ausgewählten text.
<div style="width:300px;padding:10px;" contenteditable="true">test test test test</div>
<script>
function saveSelection() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
return sel.getRangeAt(0);
}
} else if (document.selection && document.selection.createRange) {
return document.selection.createRange();
}
return null;
}
function restoreSelection(range) {
if (range) {
if (window.getSelection) {
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection && range.select) {
range.select();
}
}
}
</script>
- Sie müssen mit den Methoden des Range-Objekts (siehe mozilla-doc: developer.mozilla.org/en/DOM/range ). Im Grunde genommen, eine Reihe besteht aus einer Knoten-und offset innerhalb dieses Knotens. Eine Möglichkeit zum speichern der HTML-zusammen mit der Auswahl ist die Verwendung von "carets" (siehe Schließung der Bibliothek für Ideen: closure-library.googlecode.com/svn/docs/... ).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine typische Anwendung wäre die Anzeige eine Art von widget oder einen dialog zu akzeptieren, die Eingaben vom Benutzer (und damit möglicherweise die Zerstörung der ursprünglichen Auswahl) und wiederherstellen der Auswahl, nachdem das widget ausgeblendet wurde. Verwenden der Funktionen ist Recht einfach, die größte Gefahr ist, versuchen, um die Auswahl zu speichern, nachdem es bereits zerstört worden.
Hier ist ein einfaches Beispiel. Es zeigt eine text-Eingaben und überschreibt die Auswahl der bearbeitbaren
<div>
mit dem text aus der Eingabe. Es gibt zu viel code zum einfügen in hier, also hier ist der vollständige code: http://www.jsfiddle.net/timdown/cCAWC/3/Auszug:
saveSelection()
undrestoreSelection(range)
in einer Weise, dass Sie Gegner dercontenteditable div
? also so wie es saveSelection('mycontentId')` und restoreSelection(Bereich 'mycontentId') ? Ich bin versucht, es auf zwei separaten 'div' s und ich muss das Ziel jedes ? Gibt es eine Möglichkeit zu integrierengetElementById
im zwei Funktionen, so kann ich den Gegner ?var selectionsById = {}; selectionsById['mycontentId'] = saveSelection(); restoreSelection(selectionsById['mycontentId']);
.document.selection
gibt einen Kompilierungsfehler in Maschinenschrift, weildocument.selection
im Beispiel speziell für den IE.nur eine Empfehlung:
ist es schwer zu arbeiten mit nativen browser-Auswahl + contenteditable + Griff alle anderen browser Aspekte + speichern und wiederherstellen der Auswahl und etc von Grund auf neu..
Ich würde empfehlen, feingliedrige https://code.google.com/p/rangy/wiki/SelectionSaveRestoreModule
die speziell gemacht, um all die harte Arbeit mit der Auswahl für Sie
überprüfen Sie die Dokumentation, es ist einfach zu bedienen 😉
hoffe, es wird Ihnen helfen,