这是我想要完成的事情:当用户使用鼠标、键盘或触摸来选择“myDiv”中的文本时,我想获取三个谨慎的 HTML 块:选择之前的 HTML(在它的“左侧” )、选择内部的 HTML 以及选择之后的 HTML(在它的“右侧”)。html 应该与 myDiv.innerHTML 中出现的一样。
选择可能在标记对内开始或结束(即,孤立的选择不一定是有效的 HTML)。我不需要处理选择中的绝对定位元素等特殊情况;我关心的所有选择都将被限制在一个 div 中,该 div 将包含基本标签,如 strong、em、ul、ol、h1、image 和 table。
我最接近的是使用rangy来获取选择并调用selection.getRangeAt(0).cloneContents()
以获取选择 HTML。这工作得很好,直到我做出一个单独无效的选择,并且浏览器更改文档片段的 HTML 以使其成为有效标记。
额外信息:这就是我需要这个的原因:
我正在创建一个文档反馈系统,因此我需要将选择信息保存到数据库中以供以后检索和重构。通常我会使用 DOM 路径和选定的文本保存选择,但文本可能会在保存和重构之间发生变化。例如,作者可能会移动整个段落、删除部分等。这样 DOM 路径就变得毫无用处了。
所以我的(不完美的)计划是将选择存储为[偏移量,长度,html_snippet]。这就是“立场”。我还将存储直接出现在所选文本之前和之后的 html 片段。这就是“上下文”。
使用这些数据的组合,我应该能够在大多数情况下重新定位最初选择的文本,即使它已经移动或部分更改。当失败时,用户界面将有办法解决它,但我希望这种情况尽可能少地发生。
非常感谢!