在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。