我想基于纯文本(不带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标签,因此Highlight功能必须能够处理它。
这里有类似的问题,但也存在相同的问题(未解决) 基于位置的文本突出显示
因此,也许我需要一个解决方案,该解决方案将基于文本内的任何其他html标签以某种方式计算我的新startPos和endPos?
开心每一天1111
相关分类