来自webkit浏览器中的getClientRects的clientRect的语义

时间:2011-08-29 16:10:28

标签: javascript selection range

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

例如,假设这个para用我在这里的相同换行符渲染:

<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'

我想要的唯一值是0,1和&amp; 4.矩形2&amp; 3表示选择所跨越的元素的开始标记的内容。

对rects的几何检查将允许我丢弃2&amp; 3,但代码让我觉得有点脆弱,特别是如果我的选择扩展到第三行。无论如何确定没有几何检查的rects的来源,我可以用它来丢弃2&amp; 3?

1 个答案:

答案 0 :(得分:0)

据我所知。 Range的这个功能在所有浏览器中都相对较新,我看过很少有关于它的文章,所以我认为它没有被广泛使用,并且可能存在浏览器错误。例如,这看起来像是一个WebKit错误,因为在我看来,它很快就会违反the part of the CSSOM View spec pertaining to Ranges