0

別の要素の開始時に空の要素の前にノードを挿入しようとすると、この問題に気付きました (パイプ | はキャレット位置です)。これから始めます:

<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の選択保存および復元モジュールを使用してそれを実行しています)。

4

1 に答える 1

1

これは、WebKitが前の位置<span>を有効なキャレット位置と見なさないためです。これは、これらのWebkitのバグに関連しています。

範囲が期待どおりである場合、Rangyを使用すると、目的の場所にノードを挿入できますが、選択範囲から範囲を取得した場合、範囲はブラウザーの選択範囲を反映します。それを回避する方法があるかもしれませんが、私はあなたが何をしようとしているのか正確にははっきりしていません。

于 2012-05-30T08:37:38.763 に答える