Jquery在Redactor文本编辑器中获得突出显示的文本

时间:2012-07-22 16:07:48

标签: jquery wysiwyg text-editor redactor

我正在使用名为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经验的人,请帮忙!

3 个答案:

答案 0 :(得分: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内部函数命名和调用方式的影响,但缺点是您的代码不再与浏览器无关。

答案 1 :(得分:4)

更新:Redactor添加了一个新函数来获取所选的html。

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

答案 2 :(得分:3)

您可能需要这样:$('#redactor_content').getDoc()[0].getSelection();

试试这个:

  • 转到:http://redactorjs.com/docs/examples/fixed/
  • 选择一些文字
  • 在Firefox(或Chrome)中打开控制台
  • 并输入:

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

  • 按Enter键或单击“运行”。