Скажем, у меня есть этот HTML:Замена выделения текста с помощью строки без разрушающих тегов вне выделения
<div class="edit" contenteditable="true">
<b>Example text</b>
Text outside
<b>
<i>
<u>underlined and italic and bold</u>
italic and bold</i></b>
more Text
<br>
after the line break
</div>
И для удобства у меня есть эта яваскрипта функция, которая возвращает смещение конца выбора в данный элемент:
Допустим, пользователь сделал выбор, который начинается и заканчивается outside
в italic and bold
так это выглядит следующим образом:
"outsideunderlined and italic and bolditalic and bo"
Как вы можете заменить всю эту строку, не повреждая <b>Example text</b>
и текст, который приходит после выбора. Если строка заменим с пустой строкой ""
результат должен выглядеть примерно так:
<div class="edit" contenteditable="true">
<b>Example text</b>
Text
ld
more Text
<br>
after the line break
</div>
Я не волнует, если теги в выборе сохраняются или нет, я не уверен, какой способ проще.
Если вам не ясно, пожалуйста, спрашивайте.
Благодарим за помощь.
"ld" был выделен полужирным шрифтом, он должен быть выделен полужирным шрифтом после замены текста, не согласны? – MaxArt
@MaxArt На самом деле он был выделен жирным шрифтом и выделен курсивом. Мне все равно, останется ли это так. Но ни в коем случае он не должен полностью исчезать – MentholBonbon
Непростая задача, во всяком случае. Вам нужно будет проверить, является ли 'range.startContainer === range.endContainer' - если это так, это тривиально. Или же вам придется удалить часть текстовых узлов и каждый элемент между ними. Я напишу ответ позже. – MaxArt