Internet Explorer TextRange 中的字符偏移量
据我所知,没有简单的方法可以从 Internet Explorer 中的 TextRange 对象检索字符偏移量。 W3C Range 对象有一个节点,以及该节点内文本的偏移量。 IE 似乎只有像素偏移。 有一些方法可以创建、扩展和比较范围,因此可以编写一个算法来计算字符偏移量,但我觉得我一定错过了一些东西。
那么,计算 Internet Explorer TextRange 开头的字符偏移量的最简单方法是什么?
As far as I can tell there's no simple way of retrieving a character offset from a TextRange object in Internet Explorer. The W3C Range object has a node, and the offset into the text within that node. IE seems to just have pixel offsets. There are methods to create, extend and compare ranges, so it would be possible to write an algorithm to calculate the character offset, but I feel I must be missing something.
So, what's the easiest way to calculate the character offset of the start of an Internet Explorer TextRange?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我使用基于此插入符号位置技巧的方法:
由于 moveEnd 返回实际移动的字符数,因此 offset 现在应该是距文档开头的偏移量。 这对于测试原始插入符移动效果很好,但对于扩展选择和获取包含范围锚点的精确节点,您将需要更复杂的东西:
这应该返回正确的插入符文本偏移量。 当然,如果您已经知道目标节点,或者能够提供上下文,那么您可以跳过整个循环搜索混乱。
I use a method based on this caret position trick:
Since moveEnd returns the number of characters actually moved, offset should now be the offset from the start of the document. This works fine for testing primitive caret movement, but for expanded selections and for getting the exact node that holds the range anchor you'll need something more complex:
This should return the correct caret text offset. Of course, if you know the target node already, or are able to provide a context, then you can skip the whole looping search mess.
我建议使用 IERange,或者只是
TextRange
-to -来自它的DOM Range
算法。更新,2011 年 8 月 9 日
我现在建议使用我自己的 Rangy 库,该库与IERange 的想法,但得到了更充分的实现和支持。
I'd suggest IERange, or just the
TextRange
-to-DOM Range
algorithm from it.Update, 9 August 2011
I'd now suggest using my own Rangy library, which is similar in idea to IERange but much more fully realized and supported.
我使用了一个稍微简单的解决方案,使用 textRange 的偏移值:
I used a slightly simpler solution using the offset values of a textRange:
您可以使用
String.substring()
迭代 body 元素的TextRange.text
属性,以与您想要的字符偏移量的 TextRange 进行比较。[
findText() 的参考
]You can iterate through the body element's
TextRange.text
property usingString.substring()
to compare against the TextRange for which you want the character offset.[Reference for
findText()
]