0

正しい範囲オブジェクトを取得できない理由がわかりません。問題を説明するのは難しいです。

例:5つのdivがあり、各divにはフレーズが含まれています。論理的にmousedownは、これらのdivのいずれかでイベントをトリガーすると、イベントターゲットを取得できます。わかりました、これは初歩です。

ただし、イベントで範囲オブジェクトを操作するmousedown場合、イベントターゲットは常にクリックしたものですが、range.startContainerは前のdivを指しています。

このフィドルをチェックしてください:


 1 LineLineLine
 2 LineLineLineLineLine
 3 LineLineLineLine
 4 LineLineLine
 5 LineLineLineLine

問題を再現するための手順(コンソールを参照):

  1. 最初の行でマウスボタンを押したままにします(コンソールは「undefined」と言います[*]
  2. マウスボタンを離します(範囲は安全に最初の行を指しています)
  3. 4行目でマウスボタンを押したままにします(コンソールは「firstline」と言います)
  4. コンソールには、前にクリックした行が表示されます

[*] ドキュメントにまだ範囲がないため未定義ですが、その場で作成してドキュメントに挿入できるため、これは重要ではありません。

範囲の前にmousedownイベントが実行されたと推測できます。

4

1 に答える 1

0

マウスダウンで正しい範囲を取得できるとは思いません。トリガーは範囲検出よりも高速です。あなたはmouseup(デモ)を使うことができます:

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

または、少し遅延を追加します(デモ):

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