我正在开发一个javascript库,用于获取用户选择(他们突出显示的内容)的位置(以像素为单位)。
为了解决此问题,我向DOM添加了不可见标记,并使用jQuery .position
来获取像素位置。这些DOM更改导致用户选择丢失,因此我需要以编程方式重新创建它。
我使用rangy库来处理跨浏览器的范围和选择。
这是有效的,但是有一个错误已经让我无法忍受好几天我似乎无法破解。重新创建选择后,如果用户持有 Shift 并按 Left 或 Right ,则选择不会在Chrome中正常增长和缩小。< / p>
小提琴显示问题:http://jsfiddle.net/dvQ4g/3/
用鼠标从左到右突出显示“这是一些文字”的一部分。
现在,如果您 Shift + Right ,则选择将从右侧按预期展开。
但是,如果您 Shift + Left ,则选择不会按预期从右侧收缩。相反,它从左边开始。
(注意......如果你按 Shift + 左一旦它也改变了高亮方向,那么你需要重新选择以便再次看到从正确的工作中扩展。)
这种情况发生在Chrome中,但不适用于Firefox或Safari。
我想我已经找到了原因。 Chrome不会强制执行指示,除非您明确说明它是向后的。否则,它会等待用户首先看到的内容。如果他们 Shift + Right ,它将成为前锋选择。如果他们 Shift + Left ,它将成为向后选择。因此,在Chrome中,以编程方式创建转发选择实际上并不是前进...这是一个等待方向的选择。
但知道这一点,我该怎么做呢?我想我需要找到一种不会导致选择丢失的方法。有关这种方法的任何想法吗?