Ho un div contenteditabile che mi piacerebbe poter consentire agli utenti di inserire elementi come collegamenti, immagini o video di YouTube. Al momento questo è quello che ho:Ottieni e imposta la posizione del cursore con div contenteditable
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>
Come si può vedere, l'utente deve digitare in una casella di testo separato per immettere l'indirizzo di collegamento. Di conseguenza, quando il collegamento viene aggiunto all'editor, non viene aggiunto alla posizione in cui si trova il puntatore/cursore.
La mia domanda è come posso ottenere e impostare la posizione del puntatore/cursore. Ho visto altre domande come this for setting the pointer tuttavia preferirei avere una soluzione supportata in tutti i browser moderni, inclusi Chrome, Safari, Firefox e IE9 +.
Qualche idea? Grazie.
Edit:
Ho trovato il codice sotto che ottiene la posizione tuttavia, si ottiene solo la posizione secondo la linea è acceso. Per esempio, se ho avuto questo (dove |
è il cursore):
This is some text
And som|e more text
Poi sarei tornato il valore 7, non 24.
function getPosition() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt) {
return sel.getRangeAt(0).startOffset;
}
}
return null;
}
La soluzione a cui è collegato ha una soluzione che funziona su tutti i browser, basta leggere oltre quella accettata. Per ottenere la posizione del cursore, prova questo: http://stackoverflow.com/questions/4767848/get-caret-cursor-position-in-contenteditable-area-contain-html-content – SunKnight0
@ SunKnight0 Ho provato il seguente codice dal soluzione fornita dall'utente tuttavia restituisce come sempre 0 .var editor = document.getElementById ('# editor'); ' ' console.log (getCaretCharacterOffsetWithin (editor)); 'Ho utilizzato la funzione da questa risposta http: // stackoverflow .com/questions/4811822/get-a-ranges-start-and-end-offset-relative-to-its-parent-container/4812022 # 4812022 –
Utilizzare 'getElementById ('editor')'. Stai mescolando JavaScript vaniglia con JQuery. – SunKnight0