diff --git a/src/helpers/dom/getRichElementValue.ts b/src/helpers/dom/getRichElementValue.ts index 77b5deac..ca009709 100644 --- a/src/helpers/dom/getRichElementValue.ts +++ b/src/helpers/dom/getRichElementValue.ts @@ -105,8 +105,8 @@ export default function getRichElementValue(node: HTMLElement, lines: string[], if(isBlock && line.length || node.tagName === 'BR') { lines.push(line.join('')); line.splice(0, line.length); - } else if(node.tagName === 'IMG') { - const alt = (node as HTMLImageElement).alt; + } else if(node instanceof HTMLImageElement) { + const alt = node.alt; if(alt) { line.push(alt); offset.offset += alt.length; diff --git a/src/helpers/dom/getRichValueWithCaret.ts b/src/helpers/dom/getRichValueWithCaret.ts index f714ff3d..68979674 100644 --- a/src/helpers/dom/getRichValueWithCaret.ts +++ b/src/helpers/dom/getRichValueWithCaret.ts @@ -28,11 +28,21 @@ export default function getRichValueWithCaret(field: HTMLElement, withEntities = range.startContainer == range.endContainer && startOffset == range.endOffset ) { - // * if focused on img + // * if focused on img, or caret has been set via placeCaretAtEnd const possibleChildrenFocusOffset = startOffset - 1; - if(range.startContainer === field && field.childNodes[possibleChildrenFocusOffset]) { - selNode = field.childNodes[possibleChildrenFocusOffset]; - selOffset = 1; + const childNodes = field.childNodes; + if(range.startContainer === field && childNodes[possibleChildrenFocusOffset]) { + selNode = childNodes[possibleChildrenFocusOffset]; + selOffset = 0; + + for(let i = 0; i < range.endOffset; ++i) { + const node = childNodes[i]; + const value = node.nodeValue || (node as HTMLImageElement).alt; + + if(value) { + selOffset += value.length; + } + } } else { selNode = range.startContainer; selOffset = startOffset;