День добрый! Приведу сразу свой код.
function optionStyleText(style, tag) {
selText = document.getSelection();
anchorOffset = selText.anchorOffset;
focusOffset = selText.focusOffset;
node = document.getSelection();
textSel = document.getSelection().toString();
const tagDecorText = document.createElement(tag);
tagDecorText.setAttribute('class', style);
let range = new Range(); //создаю диапазон
range.setStart(textNode.firstChild, anchorOffset);
range.setEnd(textNode.lastChild, focusOffset);
content = range.extractContents();
tagDecorText.innerHTML = textSel;
range.deleteContents();
range.insertNode(tagDecorText);
document.getSelection().removeAllRanges();
document.getSelection().addRange(range);
}
если передаю тег b и класс то все устанавливается. Текст выделенный становится жирным и присваивается класс. А как обработать снятие? На мысль приходит одно нужно условие проверки, обернут текст или нет в какой-либо тэг? Подскажите направление хоть куда копать? п.с. и можете объяснить принцип работы getAtRange, а то не догоняю слегка его