私はclass要素でテキストをクラスに置き換える単純な構文ハイライターに取り組んでいます。js contenteditable - 新しく挿入された要素に書き込むのを防ぎます
言って、私は
<div contenteditable="true">
Some text. | And some other text.
</div>
を持っているとカーソルがにあります|パイプ
//ユーザーがタイプfoo
<div contenteditable="true">
Some text. foo| And some other text.
</div>
//と私はそれを交換する場合、挿入された要素
<div contenteditable="true">
Some text. <span class="highlight-foo">foo</span>| And some other text.
</div>
後に選択するように設定ができますが、入力した場合、あなたはに入力どんなところでも。
//型バー
<div contenteditable="true">
Some text. <span class="highlight-foo">foobar|</span> And some other text.
</div>
と私はそれを望んでいないが、私は右の新しく挿入された要素の後に選択を設定することはできません。
<div contenteditable="true">
Some text. <span class="highlight-foo">foo</span>bar| And some other text.
</div>
ここで強調して交換を行いJS ..それを解決する方法
...
// chunk is the variable that holds foo, if we stick the the above example..
// select it
range.setStart(range.startContainer, range.startOffset-chunk.length);
// add it to the range
sel.addRange(range);
// replace it..then set the range to the textNode after the span
// because after the injection selection.anchorNode is the textNode inside the span..
// in chrome, however, this below sets the range correctly.
range.setStart(sel.anchorNode.parentNode.nextSibling, 0);
// and it's all good until now, but adding the range to the selection does nothing..
sel.removeAllRanges();
sel.addRange(range)
// the selection is still inside the span..
ですか? o私はそれについてたくさん読んだことがありますが、ここでかなりの量の質問がありましたが、この特定の問題に関しては何もありません。
私は、それは必ずゲットーコムで動作するように見えるので、そうです。ありがとう、私はあなたの答えを受け入れる。私はこのような回避策を使用することに少し消極的ですが、今のところ他の方法はないようです。ありがとうございます – tenshou
@ tenshou:私は良いかもしれない別の回避策を見つけました。私は自分の答えを更新しました。 –
それはいいです、ありがとう。スペースをゼロで削除する余分な作業が不要になります。クリックしても矢印キーでリンクを入力することはできませんが、ゲッコのスリムな境界線があります。もしあなたが右を目指せば、リンクにカーソルを置くことができます。文字を見ると、それはまだ同じオフセットにあるでしょう。それは別の話です。ありがとうございました! – tenshou