Mam contenteditable div, który chciałbym, aby użytkownicy mogli wstawiać takie rzeczy jak linki, obrazy lub filmy z YouTube. W tej chwili jest to, co mam:Zdobądź i ustaw pozycję kursora z 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>
Jak widać, użytkownik musi wpisać w oddzielnym polu tekstowym wpisać adres linku. W rezultacie, gdy link zostanie dodany do edytora, nie zostanie dodany do pozycji, w której znajdował się wskaźnik/karetka.
Moje pytanie brzmi: mogę uzyskać i ustawić lokalizację wskaźnika/karetki. Widziałem inne pytania, takie jak this for setting the pointer, ale wolałbym mieć rozwiązanie, które jest obsługiwane we wszystkich nowoczesnych przeglądarkach, w tym Chrome, Safari, Firefox i IE9 +.
Wszelkie pomysły? Dzięki.
Edit:
znalazłem poniższy kod, który pobiera pozycję jednak robi się tylko położenie według linii jest włączony. Na przykład, gdybym miał to (gdzie |
jest kursor):
This is some text
And som|e more text
Następnie chciałbym być zwrócone wartości 7, nie 24.
function getPosition() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt) {
return sel.getRangeAt(0).startOffset;
}
}
return null;
}
Rozwiązanie, z którym łączyłeś się ma rozwiązanie, które działa we wszystkich przeglądarkach, po prostu przeczytaj poza akceptowanym. Jeśli chodzi o uzyskanie pozycji kursora, spróbuj tego: http://stackoverflow.com/questions/4767848/get-caret-cursor-position-in-contenteditable-area-containing-html-content – SunKnight0
@ SunKnight0 Próbowałem następującego kodu z rozwiązanie, które podałeś, ale zwraca jak zwykle 0.'var editor = document.getElementById ('# editor'); ' ' console.log (getCaretCharacterOffsetWithin (editor)); 'Użyłem funkcji z tej odpowiedzi http: // stackoverflow .pl/questions/4811822/get-a-ranges-start-and-end-offset-relative-to-its-parent-container/4812022 # 4812022 –
Użyj 'getElementById ('editor')'. Miksujesz wanilię JavaScript z JQuery. – SunKnight0