Я хочу выделить текст в HTML-элемент на основе начальной и конечной позиции простого текста (без HTML).
Например, если у нас есть предложение "Привет, как дела?"
и я хотел выделить слово «Hello», startPos 0 и endPos 5.
Это работает нормально в моем коде для # text1.
<div id="segment">
<div id="text1">Hello, <b>how</b> are you?</div>
<div id="text2"><b>Hello</b>, how are you?</div>
</div>
var text1 = document.querySelector('#text1').innerHTML;
document.querySelector('#text1').innerHTML = highlightLetters(text1, 0,5);
function highlightLetters(segmentHTML, startPos, endPos) {
return "<span style='background-color:pink;'>" +
segmentHTML.slice(startPos, endPos) + "</span>" +
segmentHTML.slice(endPos);
}
Проблема видна в # text2, где слово Hello заключено в теги html . Запуск highlightLetters () обернет область выделения даже между тегами html.
Ожидаемый результат после запуска функции выделения на # text2 должен выглядеть следующим образом:
<div id="text2"><span style='background-color:pink;'><b>Hello</b></span>, how are you?</div>
https://jsfiddle.net/mwedL6to/1/
Примечания:
- Мои начальные и конечные позиции выделены из внешнего API проверки орфографии.
- # text1 или # text2 могут содержать действительно случайные html-теги, поэтому функция подсветки должна иметь с ней дело.
похожая проблема здесь, но та же проблема есть и там (нерешена)
Подсветка текста по позициям
Так что, возможно, мне нужно решение, которое каким-то образом вычислит мои новые startPos и endPos на основе каких-либо дополнительных HTML-тегов внутри текста?