編集できないコンテンツをテキスト フローに挿入する CKEditor プラグインの開発に問題があります。範囲関数を利用しようとしましたが、ドキュメントが優れていないため、ほとんど成功していません。したがって、いくつかのテキストが与えられた場合、プラグインが「[[uneditable stuff]]」を挿入し、WYSIWYG 表示でそれをスパンでラップして、色でスタイル設定できるとします。
<p>This is some text[[uneditable stuff here]]</p>
編集不可能なものを最初に挿入するとき、ユーザーが入力を続けるか、Enter キーを押して新しい行を入力できるようにしたいと考えています。次のコード (ここで取得した: CKEditor でカーソル位置をテキストの終わりに設定する方法) は Firefox では機能しますが、(当然のことながら) IE9、8、または 7 では機能しません。
var s = editor.getSelection();
editor.insertElement(e); // element 'e'= a span created earlier
var p = e.getParent();
s.selectElement(p);
var selected_ranges = s.getRanges();
selected_ranges[0].collapse(false); // false = to the end of the selected node
s.selectRanges(selected_ranges); // putting the current selection there
だから私がしたいのは、カーソルが「^」の位置に移動することです:
<p>This is some text<span>[[uneditable stuff here]]</span>^</p>
新しい要素が行末にない場合、作成後、カーソルは次の場所に移動する必要があります。
<p>This is some text<span>[[uneditable stuff here]]</span>^ with more text after the new element</p>
FF では、新しい要素の後の位置ではなく、行末にカーソルを取得できます。IE では、カーソルはまだ新しい SPAN 内にあり、入力時に表示され、スパンの css カラーのままであり、SOURCE ビューに切り替えると、テキストが表示されなくなります (編集できないスパンであるため)。
range.setStartAfter メソッドがあることは知っていますが、FF/Chrome でもまったく機能させることができませんでした。
CKEditor で範囲と選択の方法を使用することを本当にうまく処理できる人はいますか? 私はしないことを知っています!
editor.insertElement を使うだけではダメだと思い始めたので、まだ理解していない FakeElement (insertBogus?) 関数について学習する必要があります。リンクや画像などのストック プラグインには、この問題はないようです。