0

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

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

但是,如果我在事件上使用范围对象mousedown,则事件目标始终是我单击的,但range.startContainer指向前一个 div;

看看这个小提琴


 1 LineLineLine
 2 LineLineLineLineLine
 3 LineLineLineLine
 4 LineLineLine
 5 LineLineLineLine

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

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

[*] 未定义,因为文档还没有范围,但这无关紧要,因为我可以即时创建一个并将他注入到文档中。

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

4

1 回答 1

0

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

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

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

$("div.line").mousedown(function() {
    setTimeout(setPos, 4);
});
于 2012-12-14T21:52:19.253 回答