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):

方法一:未记录的内部函数

有一个名为 的内部函数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 回答