2012-03-23 7 views
1

テキストを選択してページ内の選択したテキストを復元する方法を使用すると、execCommand('insertHTML...を実行すると保存された選択が破損することがわかりました。execCommand insertHTMLは、保存されたwindow.getSelection()を破損します。

これは、テキストの選択と復元のサンプルです。

// Get Selection 
var sel = window.getSelection().getRangeAt(0); 
// Clear Selections 
window.getSelection().removeAllRanges(); 
// Restore Selection 
window.getSelection().addRange(sel) 

しかし、これはあなたが選択startOffset

と同じ値に自分自身を設定しendOffsetexecCommand('insertHTML..選択を実行したら、その理由があり、正常に動作しますか?もっと重要なことは、これには方法がありますか?


ここでは、いくつかの基本的なコンソールログの完全な例を示しています。 http://jsfiddle.net/blowsie/Y8pJ7/

このフィドルの目的は、テキストを選択し、大文字に変換してテキストを再選択することです。

答えて

3

選択を保存して復元するには、実際に何をしているのかによります。具体的な例としては、既存のテキストが大文字と小文字を変換しているだけの場合は、https://stackoverflow.com/a/5596688/96100などの文字インデックスベースのアプローチをお勧めします(この回答にはRangyが必要ですが、それを必要としないように変更することも可能です):http://jsfiddle.net/Y8pJ7/8

その他の場合は、selection save/restore module(開示:私はRangyの著者です)のselection save/restore moduleで取られたアプローチである、目に見えないマーカー要素を選択の最初と最後に使用することをお勧めします。

UPDATE 2012年6月18日

Rangyは現在の文字はオフセットベースました(demo)新しいTextRange moduleを経由して保存し、選択と範囲を復元します。

+0

本当に素敵なティム、私のフィドルをつかまえる時間をとってくれてありがとう。 – Blowsie

関連する問題