Wie setze ich die Position des Caret (Cursor) im contenteditable Element (div)?
Habe ich diese einfache HTML als Beispiel:
<div id="editable" contenteditable="true">
text text text<br>
text text text<br>
text text text<br>
</div>
<button id="button">focus</button>
Ich will einfache Sache - wenn ich auf die Schaltfläche klicke, möchte ich, um Platz Einfügemarke(cursor) in bestimmten Ort in der editierbaren div. Von der Suche über das web, habe ich dieses JS befestigt Schaltfläche klicken, aber es funktioniert nicht (FF, Chrome):
var range = document.createRange();
var myDiv = document.getElementById("editable");
range.setStart(myDiv, 5);
range.setEnd(myDiv, 5);
Ist es möglich, manuell die caret-position wie dieser ?
InformationsquelleAutor der Frage Frodik | 2011-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den meisten Browsern müssen Sie die
Bereich
undAuswahl -
Objekte. Geben Sie jeweils die Auswahlgrenzen als Knoten und einem offset innerhalb dieses Knotens. Zum Beispiel, setzen Sie den Cursor an der fünften Zeichen in der zweiten Zeile der text, würden Sie Folgendes tun:IE < 9 funktioniert völlig anders. Wenn Sie brauchen, um Unterstützung für diese Browser müssen Sie verschiedene Codes.
jsFiddle Beispiel: http://jsfiddle.net/timdown/vXnCM/
InformationsquelleAutor der Antwort Tim Down
Meisten Antworten finden Sie auf contenteditable cursor-Positionierung sind ziemlich simpel, dass Sie nur gerecht für Eingänge mit plain-vanilla-text. Sobald Sie die Verwendung der html-Elemente innerhalb des Containers der eingegebene text wird aufgeteilt in Knoten und verteilt großzügig über eine Baumstruktur.
Festlegen der cursor-position habe ich diese Funktion, die Schleifen Runden alle child-text-nodes innerhalb der mitgelieferten Knoten und legt eine Reihe aus der start der ersten Knoten an der chars.Graf Charakter:
Ich dann Aufruf der routine mit dieser Funktion:
Bereich.collapse(false) setzt den cursor an das Ende der Reihe. Ich habe es getestet mit den neuesten Versionen von Chrome, IE, Mozilla und Opera, und Sie alle gut funktionieren.
PS. Wenn jemand interessiert ist, ich bekomme die aktuelle cursor-position mit diesem code:
Code bewirkt das Gegenteil der set-Funktion - es wird das aktuelle Fenster.getSelection().focusNode und focusOffset und rückwärts zählt alle text-Zeichen angetroffen, bis es auf einem übergeordneten Knoten mit id containerId. Die isChildOf-Funktion prüft vor der Ausführung, dass die suplied Knoten ist eigentlich ein Kind der gelieferten parentId.
Sollte der code funktionieren gerade ohne ändern, aber ich habe nur genommen aus einem jQuery-plugin habe ich entwickelt hat, so haben ausgehackt ein paar dies ist - lassen Sie mich wissen, wenn etwas nicht funktioniert!
InformationsquelleAutor der Antwort Liam
Ist es sehr schwer einstellen Cursor in der richtigen position, wenn Sie Voraus element wie (p) (span) etc.Das Ziel ist es, zu get (object text):
InformationsquelleAutor der Antwort Jalaluddin Rumi
Wenn du nicht jQuery verwenden möchten, können Sie versuchen, diesen Ansatz:
editableDiv
Sie editierbare element, vergessen Sie nicht, um einid
. Dann brauchen Sie, um IhreinnerHTML
aus dem element und schneiden Sie alle Bremse Linien. Und setzen Sie einfach nach dem Zusammenbruch nächsten Argumente.InformationsquelleAutor der Antwort Volodymyr Khmil