mam ten contentedittable divjak zdobyć pozycję daszka o contenteditable div, który zawiera obrazy
<div contenteditable="true" id="text">minubyv<img src="images/smiley/Emoji Smiley-01.png" class="emojiText" />iubyvt</div>
Oto opis obrazu na wyjściu kodu
więc chcę dostać karetkę pozycja div i pozwala założyć, że kursor znajduje się za ostatnim znakiem. A to jest mój kod do uzyskania pozycji daszka
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
var update = function() {
console.log(getCaretPosition(this));
};
$('#text').on("mousedown mouseup keydown keyup", update);
Ale problemem jest to, że zwraca 6
zamiast 14
. Pozycja opiekuna powraca do 0
po obrazie. Czy istnieje sposób, w jaki mogę uzyskać pozycję opiekuna, aby w tym przypadku być 14
.
EDIT
Chcę również wstawić jakiś element, zaczynając od położenia karetki. tak to jest moja funkcja to zrobić
selectStart = 0;
var update = function() {
selectStart = getCaretPosition(this);
};
function insertEmoji(svg){
input = $('div#text').html();
beforeCursor = input.substring(0, selectStart);
afterCursor = input.substring(selectStart, input.length);
emoji = '<img src="images/smiley/'+svg+'.png" class="emojiText" />';
$('div#text').html(beforeCursor+emoji+afterCursor);
}
Twój kod jest fajne, ale trzeba wykryć wszystkie html zawartość elementu div nie zawiera tekstu, ponieważ będę wstawiał niektóre znaki do elementu div w pozycji daszka. Spójrz na moje pytanie edytuj. –
@doggiebrezy Sprawiłem, że działa tak, jak chcesz. Zobacz moją zaktualizowaną odpowiedź. Przetestowałem go w najnowszych przeglądarkach Chrome i Firefox. To nie działa na IE. –
dziękuję za edycję, ale pomóżcie mi z ostatnią rzeczą. Teraz chcę wstawić jakiś tekst lub obraz w pozycji opiekuńczej, a więc podzielę div.html, ale problem polega na tym, że zakładając, że pozycja karetki to 11, wstawiony tekst nie liczy tego obrazu jako jednego, ale całego img.html tam błędnie umieszczając punkt, w którym ma być wstawiony, proszę pomóż mi zliczyć ile stringów w div.html w tym element img –