如何在mousedown事件之前获得selection.range?

时间:2012-12-14 21:34:46

标签: javascript javascript-events range selection rangy

我不明白为什么我无法获得正确的范围对象。我很难解释这个问题。

例如:我有五个div,每个div包含一个短语。逻辑上,如果我在其中一个div中触发mousedown事件,我可以获得事件目标。好的,这是基本的。

但是,如果我在mousedown事件上使用范围对象,则事件目标总是我已经点击但是range.startContainer指向前一个div;

查看 fiddle


 1 LineLineLine
 2 LineLineLineLineLine
 3 LineLineLineLine
 4 LineLineLine
 5 LineLineLineLine

重现问题的步骤(见控制台):

  1. 在第一行按住鼠标按钮(控制台说“未定义” [*]
  2. 释放鼠标按钮(范围现在安全地指向第一行)
  3. 按住第四行的鼠标按钮(控制台说“第一行”)
  4. 控制台显示上一个点击的行

    [*] 未定义,因为文档没有范围 但是,这是微不足道的,因为我可以在飞行中创建一个并将其注入文档中。

  5. 我可以推断出mousedown事件是在范围之前执行的..或者不是?

1 个答案:

答案 0 :(得分:0)

我认为你不能在mousedown上获得正确的范围,触发器比范围检测更快。您可以使用mouseup(demo):

$("div.line").mouseup(setPos);

或者添加一个小延迟(demo):

$("div.line").mousedown(function() {
    setTimeout(setPos, 4);
});