我正在尝试选择文本并将该选择保存在localStorage或DB中,我可以通过从存储中读回来突出显示以前选择的文本。但是,如果所选文本位于页面中的多个位置,则所有实例都会突出显示,这是我不想要的。我可以抓住所选文本的左侧和顶部,但是在字体调整大小的情况下,左/顶部会发生变化。我在这里没有共享任何代码,因为没有任何内容可以与此相关。仅供参考,我指的是ipad中的iBooks应用程序具有相同的功能,我很想知道它是如何做到的?
更新:我尝试了一种新的方法,其中我在所选文本周围添加标记,使用它我可以找出稍后要突出显示的所选字符串的开头和结尾。您可以在此处查看演示:http://jsfiddle.net/codef0rmer/jE4w5/
但是在iPad rangeCount
中无效,是否有针对iPad的解决方法?
答案 0 :(得分:4)
您可以使用window.getSelection()
获取有关当前选择的信息 - 至少在现代浏览器中是这样。它将返回一个Selection对象,您可以从播放该对象提供的属性开始:
<强> anchorNode 强> 返回选择开始的节点。
<强> anchorOffset 强> 返回选择的锚点在anchorNode中偏移的字符数。
<强> focusNode 强> 返回选择结束的节点。
<强> focusOffset 强> 返回选择焦点在focusNode中偏移的字符数。
<强> isCollapsed 强> 返回一个布尔值,指示选择的起点和终点是否位于同一位置。
<强> rangeCount 强> 返回选择中的范围数。
此外,使用getRangeAt()
方法,您可以从Selection中获取Range个对象,从而提供更多有用的方法和属性。
我不知道您希望在多大程度上使用此解决方案,而且您的问题非常普遍,因此这更像是您可以采用的方向,而非现成的解决方案。