2012-07-22 86 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();

相關問題