3

tinyMCE 用の小さな単語予測プラグインを作成しています。テキストを少し抽出し、後で予測された単語のリストからテキストを挿入する必要があります。カーソルがどこにあるかを知っていて、mceInsertContentコマンドを使用できるので、挿入は問題ありません。ただし、予測のテキストを取得しています...

カーソル位置の直前の文字で終わり、テキストの先頭から始まるテキストのサブセットを抽出する必要があります。必要に応じて HTML タグを自分で取り除くこともできますが、可能であれば tinyMCE に任せることを好みます。

私は次のようにすることを考えていました:

  1. を使用して現在のカーソル位置にブックマークを挿入しますmceInsertContent
  2. テキストの先頭からブックマークまでの範囲を作成します。
  3. 範囲の内容を取得します。
  4. ブックマークを削除します。

さて、私はtinyMCEに精通していないので、これは私にとって少し挑戦的であることが証明されています。

コードはクロスブラウザーで動作する必要があります。

4

2 に答える 2

8

このコード スニペットを試すことができます (ed は tinymce エディター オブジェクトです)。

A. mceInsertContent を使用して現在のカーソル位置にブックマークを挿入する

ed.execCommand('mceInsertContent', false,'<span class="marker">\ufeff</span>');

B. テキストの先頭からブックマークまでの範囲を作成します。

var rng = ed.selection.getRng(1);
var rng2 = rng.cloneRange();

// set start of range to begin of forst paragraph
rng2.setStartBefore($(ed.getBody()).find('p:first').get(0));

rng2.setEndBefore($(ed.getBody()).find('span.marker').get(0));
ed.selection.setRng(rng2);

C. 範囲の内容を取得します。

// get content of selection (range)
var content = ed.selection.getContent({format: 'text'});

D. ブックマークを削除します。

$(ed.getBody()).find('span.marker').remove();

更新:選択の変更が心配な場合は、最初の範囲をリセットすることができます

ed.selection.setRng(rng);
于 2012-02-07T15:47:51.513 に答える