2012-03-10 5 views
1

window.getSelection()の値を保存しようとしていますが、ユーザーが別の選択を選択した場合、この値が変化するようです。コールバック中のwindow.getSelection()の値が変更されます

私のコードでは、初期ユーザーの選択を保存しました。私はフォームを作成します(少し時間がかかります)。フォームの作成が完了すると、フォームにユーザーの選択内容が入力されます。フォームが作成されている間、ユーザーは他のテキストを選択して、選択変数に格納されているオブジェクトが変更されました。選択の価値が変更されないようにするにはどうすればよいですか?

var selection = window.getSelection(); 

createForm(function() { 
    fillInForm(selection); 
}); 

EDIT - フォームの選択したテキストの位置を参照するため、選択のDOM構造を維持する必要があります。

+0

あなたはあなたのコードのいくつかのより多くを置くことができますか?クロージャを追加する方法がありますが、残りのコードに依存します – Guumaster

答えて

1

getSelection関数は、Selectionオブジェクトを返します。ドキュメントごとに1つの選択オブジェクトしか存在できないため、ユーザーが新しい選択を行うと、選択に関連する範囲が変更される必要があります。

ユーザエージェントは、ユーザがアクティブなドキュメントの選択を変更できるようにする必要があります。ユーザが選択肢を変更した場合、ユーザエージェントは適切な開始点と終了点を持つ新しい範囲を作成し、その範囲をこの新しい範囲に関連付ける(既存の範囲を変更しない)必要があります。

[...]

ユーザが選択を変更またはスクリプトがaddRange()を呼び出した場合は本明細書の他の箇所で必要に応じて、選択は、新しい範囲オブジェクトに関連付けられなければなりません。

http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selections

+0

つまり、ユーザーエージェントが別の範囲を選択すると、元の選択変数にこの新しい範囲が保持されます。元の選択をどのように維持できますか?元のデータを保持するだけの一時的な範囲を作成することを考えましたが、選択が再び変更されるとオーバーライドされませんか? – Jon

+0

@ icu222私は本当にわかりません...あなたはそれを文字列にシリアル化するか、あるいは 'Object.create'を使って"クローン "を試みることができます –

関連する問題