使用 JS 在可编辑 div 中突出显示所选文本

Highlight the selected text in editable div using JS

我不知道如何在可编辑的 div 中突出显示 selected 文本(当其中包含许多标签(嵌套)时)。

如果我能得到 selection 开始的确切位置(索引在可编辑的 div、innerHTML 中),我可以在那里添加一个带有背景颜色样式的字体标签(给出高光效果)。但是我无法找到一种可靠的方法来从 selection 开始的地方获取索引。

我的示例代码位于:Sample.

"window.getSelection();" 方法为我提供了 selected 内容的完整文本,包括嵌套标签(如果我在其上使用 innerHTML)。因此,我所需要的只是一种可靠的方法来计算 selection 开始的起始索引。

非常感谢help/reference。

编辑: 假设我的 oDiv 有内容:

我是H2,标题

并说我在上面 select H2,我需要起始索引为:19(计算 oDiv 内的所有标签)。我怎样才能得到它?我需要它来处理任意深度嵌套。

var r = window.getSelection().getRangeAt(0); - 给出选区内的范围。

r.startOffset, r.endOffset - 为您提供选择范围的界限。

如果您感兴趣的 div 有一个 id 那么您可以通过以下方式获取该元素:

var objDiv = document.getElementById("divId");
var r = document.createRange();
r.selectNodeContents(objDiv);

如果元素没有id,那么还有其他方法可以获取对象。看这里:Finding HTML Elements

现在您可以使用 startOffsetendOffset 属性获取范围 r 的边界。