2011-08-29 56 views
4

在查询clientRects(getClientRects)的范围时,在webkit浏览器(在IE9或Mozilla中这似乎不是问题),返回的clientrects包含对应文本的矩形到选定的文本,还包括范围内任何元素的开始的客户端反馈。我如何确定哪些客户端产品属于这些元素。webkit浏览器中来自getClientRects的clientRect的语义

比如让说,这对用相同的换行符渲染我这里有:

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

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

getRangeAt

我还是会回到这个数组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' 

唯一rects我想是0,1,& 4 Rects 2 & 3代表选择交叉元素的开始标记的内容。

对矩形的几何检查可以让我放弃2 & 3,但是代码让我觉得有点脆弱,特别是如果我的选择延伸到第三条线的话。无论如何确定没有几何检查的矩形的来源,我可以用它来丢弃2 & 3?

+0

出于好奇,你想用'getClientRects()'实现什么? –

+0

我试图突出显示文本,与文本选择分开。如果我可以在选择中抽取多个范围,我可以忍受这一点,但似乎支持有限。 – freddylindstrom

+0

为什么不走Range的DOM或使用'document.execCommand()'(例如:http://stackoverflow.com/questions/6972581/javascript-quandary-creating-a-highlighter-pen-tool-almost-there/6972694 #6972694)? –

回答

0

不是我所知道的。 Range的这个特性在所有浏览器中都比较新,我没有看到它,所以我假设它没有被广泛使用,并且可能存在浏览器错误。举例来说,这看起来像是一个WebKit错误,因为在我看来,这违反了the part of the CSSOM View spec pertaining to Ranges