Javascript webkit浏览器中getClientRects中clientRect的语义

Javascript webkit浏览器中getClientRects中clientRect的语义,javascript,selection,range,Javascript,Selection,Range,在webkit浏览器(在IE9或Mozilla中这似乎不是问题)中,当查询clientRects(getClientRects)的范围时,返回的clientRects包含与所选文本相对应的文本矩形,但也包含范围内任何元素开头的clientRects。如何确定哪些clientract属于元素 例如,让我们假设这个段落是用我在这里使用的相同换行符渲染的: <p>This is some text StartSelection in a paragraph blah blah&l

在webkit浏览器(在IE9或Mozilla中这似乎不是问题)中,当查询clientRects(getClientRects)的范围时,返回的clientRects包含与所选文本相对应的文本矩形,但也包含范围内任何元素开头的clientRects。如何确定哪些clientract属于元素

例如,让我们假设这个段落是用我在这里使用的相同换行符渲染的:

<p>This is some text StartSelection in a paragraph 
    blah blah<span>this is some EndOfSelection blah
    more text</span>
</p>
我只需要0、1和4个矩形。矩形2和3表示所选内容交叉的元素的开始标记的内容


对矩形的几何检查将允许我放弃2和3,但代码对我来说有点脆弱,特别是如果我的选择延伸到第三行。在没有几何检查的情况下,是否可以确定RECT的来源,我可以使用它来丢弃2和3?

据我所知,还没有。
Range
的这一功能在所有浏览器中都是相对较新的,我很少看到关于它的文章,所以我认为它没有被广泛使用,而且很可能存在浏览器错误。例如,这似乎是一个WebKit错误,因为在我看来,快速阅读似乎违反了。

出于好奇,您试图通过
getClientRects()
实现什么?我试图突出显示文本,与文本选择分开。如果我可以将多个范围输入到选择中,我可以接受,但这似乎支持有限。为什么不遍历范围的DOM或使用
document.execCommand()
(示例:)?感谢我没有看到这个答案,这是一个很好的解决方案,但是我不想因为其他原因而更改内容。因此,我将使用矩形来表示高光的单独平面/装饰(上、下)的路线。我明白问题所在。我会向WebKit提交一个bug,并尝试找到解决方法。
0. rect of 'StartSelection in a paragraph'
1. rect of 'blah blah'
2. rect of 'this is some EndOfSelection blah'
3. rect of 'more text'
4. rect of 'this is some EndOfSelection'