4

Redactorという素晴らしい jquery テキスト エディターを使用しています。クリックすると、テキスト エディターで強調表示されたテキストを取得する新しいボタンを追加しようとしています。

このスクリプトでは、次の設定を追加することで新しいボタンを追加できます。

buttonsCustom: {
        button1: {
            title: 'Button', 
            callback: testButton //executes callback on button click
        } 
}  

次に、コールバックで強調表示されたテキストを取得したい

function testButton(obj, event, key)
{
     alert(highlighted_text);
}

ドキュメントを徹底的に調べましたが、強調表示されたテキストを取得する方法がありません。私は次のような他の機能を試しました...

function getSelText() {
  var txt = '';
  if (window.getSelection) {
    txt = window.getSelection();
  } else if (document.getSelection) {
    txt = document.getSelection();
  } else if (document.selection) {
    txt = document.selection.createRange().text;
  } else return;
  return txt;
}

...しかし、テキスト エディター スクリプトには既にそれを行う方法があり、それを使用するのが最善です。

スクリプトで、テキスト選択機能が 1719 行目にあるのを見つけましたが、それをカスタム ボタンに使用する方法がわかりません。

Redactor経験者の方、助けてください!

4

3 に答える 3

8

毒を選んでください (どちらの方法も Firefox と IE で動作します):

方法 1: ドキュメント化されていない内部関数

という名前の内部関数がありますがgetSelection、パブリック API の一部ではありません。

で呼び出すことができます$('#redactor_content').data('redactor').getSelection()

方法 2: 機能を複製する

Redactor の内部へのアクセスに依存したくない場合は、実装を独自の関数に複製して、内部変数へのアクセスを への呼び出しに置き換えることができますgetDoc()

function getRedactorSelection(elem)
{
    var doc = elem.getDoc().get(0);
    if (doc.getSelection)
    {
        return doc.getSelection();
    }
    else if (doc.selection)
    {
        return doc.selection.createRange();
    }
};

使用法:getRedactorSelection($('#redactor_content'))

利点は、Redactor の内部関数の命名方法と呼び出し方法の変更から保護されることですが、欠点は、コードがブラウザーに依存しなくなることです。

于 2012-07-25T05:50:51.483 に答える
4

更新: Redactor は、選択した html を取得する新しい関数を追加しました。

$('#redactor').getSelected();

于 2012-08-19T01:35:25.837 に答える
3

おそらくこれが必要です:$('#redactor_content').getDoc()[0].getSelection();

これを試して:

  • http://redactorjs.com/docs/examples/fixed/にアクセスしてください。
  • テキストを選択する
  • Firefox (または Chrome) でコンソールを開き、次のように入力します。

    alert($('#redactor_content').getDoc()[0].getSelection())

  • Enter を押すか、実行をクリックします。
于 2012-07-24T16:48:54.007 に答える