私は IE でこの問題に頭を悩ませています。contenteditable 属性が「true」に設定された要素があります。内部にはさまざまな要素があり、その一部は変更できません。テキストは、CSS クラス名「uneditable」を使用してスパンでラップされています。
「keydown」イベントのハンドラーを使用して、セレクションの anchorNode が検査されます。anchorNode が編集不可能な要素の textnode である場合、範囲は変更され、編集不可能な要素ノードの後に開始するように設定されます。これは、IE と呼ばれる忌まわしきものを除いて、すべてのブラウザで完全に機能します。
次の例を見てください。
Lorem ipsum dolor sit <span class="uneditable">amet</span>,
consectetur adipisicing elit
キャレットが編集不可能な要素の最後にある場合、押された文字キーは次のテキスト ノードの先頭に追加されます。しかし IE では、テキストは編集不可能な要素の最後に追加されます。
ハンドラーは次のとおりです。
$("#myeditor").keydown(function(ev)
{
var sel = rangy.getSelection();
var range = sel.getRangeAt(0);
if (sel.anchorNode.nodeType == 3)
{
if ($(sel.anchorNode.parentNode).is(".uneditable"))
{
range.setStartAfter(sel.anchorNode.parentNode);
rangy.getSelection().setSingleRange(range);
}
}
});
次の兄弟を選択して range.setStart(nextSibling, 0) を使用しても、IE は編集不可能な要素内に新しいテキストを追加します。IE が編集できない要素を編集しないようにするにはどうすればよいですか?
どんな助けでも大歓迎です。