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

例如,可以说此参数是使用与我在此处相同的换行符渲染的:

<p>This is some text StartSelection in a paragraph
    blah blah<span>this is some EndOfSelection blah
    more text</span>
</p>

如果我从StartSelection选择为EndOfSelection,然后从选择中查询范围-getRangeAt(0)

我会取回这个clientRects数组:
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'

我想要的唯一的rect是0、1和4。rects2和3代表所选内容所经过元素的开始标记的内容。

对rect进行几何检查可以使我丢弃2和3,但是代码对我来说有点脆弱,特别是如果我的选择要扩展到第三行时。无论如何,在没有几何检查的情况下是否可以确定整流器的来源,我可以用来丢弃2和3?

最佳答案

据我所知。 Range的此功能在所有浏览器中都是相对较新的,我很少看到有关它的文章,因此我认为它没有被广泛使用,并且可能存在浏览器错误。例如,这似乎是WebKit的错误,因为在我的快速阅读中似乎违反了the part of the CSSOM View spec pertaining to Ranges

10-01 10:34