別の要素の開始時に空の要素の前にノードを挿入しようとすると、この問題に気付きました (パイプ | はキャレット位置です)。これから始めます:
<p>|<span />Some text</p>
Range.insertNode() をRangy範囲で使用してテキストを貼り付けましたが、Chromeでは空の後に新しいノードが表示されるこの結果が表示されます<span>
:
<p><span />|INSERTED TEXTSome text</p>
これではなく:
<p>|INSERTED TEXT<span />Some text</p>
これは IE9 で正しく動作するように見えることに注意してください。挿入が<p>
ノードの開始時に行われない場合、Chrome でも動作します。例:
<p>Some |<span />text</p>
結果:
<p>Some |INSERTED TEXT<span />text</p>
これは単純化された例ですが、私が見ている問題を示しています。
明確にするために(そして、誰かが代替案を提案できる間違った方法でこれに近づいている場合)、テキストを挿入しようとしており、挿入が完了すると、新しく挿入されたテキストの最後に常にカーソルが表示されます。
例えば<p>|Original Text</p>
、なる必要があります<p>INSERTED TEXT|Original Text</p>
ただし、ノードを挿入すると、挿入されたテキストの直前にキャレットが配置されます (これは、ノードを挿入するためのものであるとドキュメントに記載されているため、そこに不満はありません)。空<span>
をマーカーとして使用して、挿入後にキャレット位置を復元しようとしています(実際、Rangyの選択保存および復元モジュールを使用してそれを実行しています)。