JavaScript:如何从Selection / Range对象开始获取绝对char位置?

时间:2014-02-04 23:44:38

标签: javascript html gwt range selection

我正在使用一些嵌入式JavaScript在GWT(Google Web Toolkit)中编写代码。

我有一个RichTextArea,我需要找到RichTextArea(这是一个生活在iframe中的Document)中的绝对字符位置,当我提供了一个Selection对象(我​​可以从中获取Range对象)

问题是,选择/范围api是非常相对论设计的 - 它可以告诉你你在哪个文本节点,父元素是什么,等等但似乎不能轻易提供绝对文档本身的字符位置。

我在这里讨论过相关的问题和问题,但这个问题特别是我没有找到的。

我想我可以得到Selection开始的文本节点,然后搜索/遍历Document查找它并添加字符偏移量。这似乎相当暴力。有没有人知道是否有办法更直接地将字符偏移到给定选择/范围的文档中?你会认为这种信息很容易被浏览器提供,但我还没有找到解决方案。

1 个答案:

答案 0 :(得分:1)

没有什么容易内置的。你可以通过使用另一个范围来缓解痛苦,这个范围跨越了可信任元素的开头和选择的开始之间的DOM部分,并在其上调用toString(),如此示例中的saveSelection()函数:

https://stackoverflow.com/a/13950376/96100

此处仅有插入符号的类似示例,以及有关此方法的缺点的注释(例如<br>元素隐含的换行符和不对字符数有贡献的块元素):

https://stackoverflow.com/a/4812022/96100