有没有办法保存所选文本,并在刷新页面后再次突出显示它?

我正在尝试选择文本并将该选择保存在localStorage或DB中,我可以通过从存储中读回来突出显示以前选择的文本。 但是如果所选文本位于页面中的多个位置,则所有实例都会突出显示,这是我不想要的。 我可以抓住所选文本的左侧和顶部,但是在字体resize的情况下,左/顶部会发生变化。 我没有在这里分享任何代码,因为没有什么可以分享与此相关。 仅供参考,我指的是ipad中的iBooks应用程序,它具有相同的function,我很想知道它是如何做得恰到好处的?

更新:我尝试了一种新的方法,其中我在所选文本周围添加标记,使用它我可以找出稍后要突出显示的所选字符串的开头和结尾。 你可以在这里看到演示: http : //jsfiddle.net/codef0rmer/jE4w5/

但在iPad rangeCount无法正常工作,iPad有什么解决方法吗?

您可以使用window.getSelection()获取有关当前选择的信息 – 至少在现代浏览器中是这样。 它将返回一个Selection对象,您可以从播放该对象提供的属性开始:

  • anchorNode返回选择开始的节点。

  • anchorOffset返回选择的锚点在anchorNode中偏移的字符数。

  • focusNode返回选择结束的节点。

  • focusOffset返回选择焦点在focusNode中偏移的字符数。

  • isCollapsed返回一个布尔值,指示选择的起点和终点是否在同一位置。

  • rangeCount返回选择中的范围数。

此外,使用getRangeAt()方法,您可以从Selection中获取Range对象,从而提供更多有用的方法和属性。

我不知道你想用这个解决方案走多远,而且你的问题很普遍,所以这更像是一个你可以去的方向而不是一个现成的解决方案。