は私がmarkdownに変換するが、適切なキャレットを(JavaScriptで)設定する方法は?
<p class="session" contenteditable="true">
Everything contained <b>**within**</b> this div is editable in browsers
that support <code>`HTML5`</code>. Go on, give it a try: click it and
start typing.
</p>
は私が入力中に、適切なHTMLタグを追加したい...、適切な解決策を考え出すことはできません。
もちろん、単純な正規表現の置き換えでは問題ありません。しかし、適切な場所にキャレットを置くのに問題があります。
上記の例では、「試し」という言葉を強調したいとします。 *
を最初に入力し、次に左の星*
を入力すると、テキストは<i>*try*</i>
に変換されますが、キャレットの位置を保持したい(キャレットを左の*
の後に設定します)。そして、その逆の場合は、右の*
が最後に設定されます。
contained <b>**within**</b> this
部分に下線を引いて設定するのがより困難です。 _contained <b>**within**</b> this_
は<u>_contained <b>**within**</b> this_</u>
になります。だから私たちは同じノードにいません。
私は複雑な解決法を考えることができますが、私はこれらのテキスト変換テクニック(範囲、ウィンドウの選択など)に熟練していないので、それを実行するよく知られた方法があるのだろうかと思います。
"右*最初と左の星*を入力している間に、テキストは * try *に変換されますが、キャレットの位置を保持したい(左後に*を設定します)そして、右の*が最後に設定されているところの逆もまた同様です。 " – Chetan
2つの状況があります。ユーザは最初に '*'をタイプし、テキストを 'try'で書き込むか、または既存の単語' try'の後にカーソルをセットし、最後の '*'をタイプします。 ユーザは 'try'(または何でも)を書くことができ、最後の' * 'を最初に入力し、次に' try'の前に移動して最初の '*'をタイプすることができます。 この場合、カーソルはここで ' * try * 'になるはずです。カーソルは' * | try * 'になるはずです。 –