Holen Sie sich die caret-position in contenteditable div-tags eingeschlossen
Ich habe eine contenteditable div, in dem ich mehrere tags (br, b, u, i), und text und ich brauche, um die Cursor-position relativ zu dem div, inklusive aller tags.
Beispiel:
<div id="h" contenteditable="true">abc<b>def<br>ghi</b>jkl</div>
Wenn sich der cursor zwischen g und h, ich brauche die position des Einfügezeichens auf sein 14.
Das problem ist, dass die gefundenen Methoden, mit denen ein treeWalker funktionieren nicht in diesem Fall.
Der bold-tag nicht gefunden... wahrscheinlich, weil es nicht geschlossen ist.
Auch ich habe versucht, verschiedene Methoden, aber immer noch kein Glück.
Ich brauche es zum arbeiten Firefox.
Danke.
- Warum brauchen Sie diese Zahl? Es ist im Grunde bedeutungslos, da es viele Möglichkeiten zur Darstellung der gleichen DOM mit verschiedenen HTML -, die eine Auswirkung auf die Zahl (z.B. durch die Verwendung
<br />
statt<br>
). Ich nehme an, Sie wollen dieses, so können Sie ein offset relativ zu der HTML-string, den Sie senden, die vom server an den browser. - ja... das ist genau das, warum brauche ich die Anzahl. Ich habe versucht, mehrere Mittel, aber noch keinen Erfolg.
- Es gibt keinen Weg, um wieder die ursprüngliche HTML-string über den DOM, so müssen Sie re-request der Seite über Ajax, das Parsen der HTML-und es passen bis zu den aktuellen DOM. Es wird ziemlich schwierig sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht das?
Holen Sie sich einen Bereich des start-und end-offset ist relativ zum übergeordneten container
Direkte link zum jsfiddle:
https://jsfiddle.net/TjXEG/1/
Funktion code:
mussten es einfach tun dieses, so gibt es einige funktionierende Lösung (einige Tests können erforderlich sein).
Grundidee ist:
bekommen textContent position mit dieser Methode: Holen Sie sich Einfügemarke (cursor -) position in contentEditable Bereich mit HTML-Inhalt
Durchlaufen innerHTML von einem element zu den textContent-position
wenn html-tag oder Entität gefunden wird, Durchlaufen wird, bis der normale char, dann weiter
Beispielcode hier:
getCaretPosition(element)
? Es scheint nicht, Sie haben auch Ihre definition.