2012-07-22 66 views
4

我正在使用名为Redactor的奇妙jquery文本编辑器。我试图添加一个新按钮,点击时获取文本编辑器中突出显示的文本。Jquery在Redactor文本编辑器中获得突出显示的文本

该脚本允许通过将以下设置添加一个新的按钮:

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行,但无法弄清楚如何将它用于自定义按钮。

任何经验与减压器,请帮助!

回答

8

挑选你的毒药(这两种方法在Firefox和IE浏览器):

方法1:记录内部功能

有一个名为getSelection的内部函数,但它不是一部分公共API。

您可以拨打电话$('#redactor_content').data('redactor').getSelection()

方法2:复制功能

现在,如果你不希望依赖于访问主编的内部,你可以复制实施到自己的函数,通过调用替换访问内部变量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的ctions被命名和调用,但缺点是您的代码不再独立于浏览器。

+0

太棒了!方法一工作,但在资源管理器返回'[object]' – CyberJunkie 2012-07-25 13:15:59

+0

在IE上,选择是[TextRange](http://msdn.microsoft.com/en-us/library/ie/ms535872%28v=vs.85%29 .aspx),所以你必须调用'.text'来得到一个字符串。这会减少方法的吸引力... – 2012-07-25 13:32:43

+0

谢谢!很棒! – CyberJunkie 2012-07-27 20:47:32

3

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

试试这个:

+0

,似乎除了在资源管理器的工作谢谢(难怪..)。 – CyberJunkie 2012-07-25 03:53:27

4

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

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