Я хочу чтобы при нажатии на кнопку на странице в текст вставлялся определённый символ. Сейчас я пришёл вот к такому коду
<div class="block">
текст..... <b>текст...<b/>текст....<b>текст....</b> текст....
<div>
let block
if(window.getSelection().anchorNode.nodeName == '#text') {
block = window.getSelection().anchorNode.parentNode
}else {
block = window.getSelection().anchorNode
}
let caret = window.getSelection().getRangeAt(0).startOffset;
console.log(block.innerHTML)
block.innerText = block.innerHTML.slice(0, caret) + symbol + block.innerHTML.slice(caret);
Если у меня в диве только текст, всё работает. Если я часть текста выделяю тегом
<b>
, то абзацы до тега считаются нормально, во всех тегах нормально, а абзацы между тегами и самый последний абзац - там startOffset берётся от последнего закрытого тега. И, соответственно, сивол вставляется в первый абзац DIVа. Я пытался разобраться. Читал, как и откуда берётся Range. Но не понимаю до конца.