Ich habe einen contenteditable div die Ich mag wäre in der Lage sein, Benutzer zu haben, Dinge einfügen wie Links, Bilder oder Videos von YouTube. Im Moment ist es das, was ich habe:Setzt und Cursorposition mit contenteditable div
function addLink() {
var link = $('#url').val();
$('#editor').focus();
document.execCommand('createLink', false, link);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Text Editor -->
<div id="editor" contenteditable="true"></div>
<!-- Add Link -->
<input type="text" id="url">
<button onclick="addLink()">Submit</button>
Wie Sie sehen können, hat der Benutzer in einem separaten Textfeld geben Sie den Link-Adresse einzugeben. Als Ergebnis, wenn die Verbindung zum Editor hinzugefügt wird, wird es nicht in die Position hinzugefügt, dass die Zeiger/caret eingeschaltet ist.
Meine Frage ist, wie ich die Position des Zeigers/caret erhalten und einstellen können. Ich habe andere Fragen wie this for setting the pointer gesehen, aber ich würde lieber eine Lösung haben, die in allen modernen Browsern unterstützt wird, einschließlich Chrome, Safari, Firefox und IE9 +.
Irgendwelche Ideen? Vielen Dank.
Edit:
fand ich den Code unter dem jedoch die Position kommt, es wird nur die Position entsprechend der Linie es eingeschaltet ist. Zum Beispiel, wenn ich dies hatte (wo |
ist der Cursor):
This is some text
And som|e more text
Dann würde ich den Wert 7, 24.
function getPosition() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt) {
return sel.getRangeAt(0).startOffset;
}
}
return null;
}
Die Lösung, die Sie verknüpft haben, hat eine Lösung, die auf allen Browsern funktioniert, lesen Sie einfach über die akzeptierte hinaus. Wie zum Abrufen der Cursorposition versuchen Sie dies: http://stackoverflow.com/questions/4767848/get-caret-cursor-position-in-contenteditable-area-containt-html-content – SunKnight0
@ SunKnight0 Ich habe den folgenden Code aus dem versucht Lösung, die Sie jedoch zurückgegeben haben, wie immer 0. 'var editor = document.getElementById ('# editor');' 'console.log (getCaretCharacterOffsetWithin (editor));' Ich habe die Funktion aus dieser Antwort http: // stack overflow verwendet .com/questions/4811822/get-a-ranges-start-und-end-offsets-relativ-zu-ihm-eltern-container/4812022 # 4812022 –
Verwenden Sie 'getElementById ('editor')'. Sie mischen Vanilla JavaScript mit JQuery. – SunKnight0