2012-03-28 22 views
2

我正在使用CLEditor,http://premiumsoftware.net/cleditor/,用於我的文本編輯器。有一個'粘貼爲文本'的功能,當點擊按鈕時彈出窗口出現,並帶有一個textarea粘貼您的內容,樣式被剝離。CLEditor,在主窗口中粘貼作爲文本功能的內容

我想要做的是採取相同的功能,但任何時候有人粘貼到主textarea這個動作是自動執行的。我會如何觸發這個?

我已經創建了一個JS小提琴,http://jsfiddle.net/helpinspireme/naubS/,但無法粘貼所有的JS在那裏所以要鏈接到主JS文件CLEditor訪問他們的網站:http://premiumsoftware.net/cleditor/

謝謝您的幫助。

回答

3

我知道我沒有回答你的實際問題,但如果你的真正的問題是由試圖從Microsoft Office粘貼文本的用戶生成的垃圾(例如Word),我會建議考慮替代方案解。

CLEditor本身可以在iFrame(富文本模式)和textarea(源模式)之間切換。 '作爲文本粘貼'功能使用了一個textarea,它不支持if文本的富文本,所以它不會首先允許垃圾html。

但是,如果編輯器處於富文本模式,很難阻止用戶從Word粘貼(他可以使用常規粘貼按鈕,按CTRL-V或甚至使用鼠標右鍵上下文菜單,都是不同的事件,很難攔截使用JavaScript)。所以現在損壞已經完成了;你的編輯器裏面有雜亂的html。因此,而不是試圖通過消毒產生的Word垃圾我採取了以下檢查(JavaScript)的在保存捕獲的輸入:

if(clEditorValue && (clEditorValue.indexOf('<!--') !== -1 || clEditorValue.indexOf('mso-ansi-language') !== -1)) { 
    alert('Unable to process text pasted from Word, please use "Paste as text" or modify your input'); 
    return; 
} 

我希望這個答案是其他人試圖達到同樣有用。

0

當粘貼到cititor中時,編輯器會從源代碼中提取所有html。我最終編輯了jquery.cleditor.js,並在$ doc.click(hidePopups)函數中添加了一個綁定函數。我使用setTimeouts來允許文本填充輸入和updateTextArea函數來完成。

.bind("paste", function() { 
      setTimeout(function() { 
       refreshButtons(editor); 
       updateTextArea(editor, true); 
       //remove any and all html from the paste action 
       setTimeout(function() { 
        //clean up the html with removeHtml function 
        $(editor.doc.body).html(removeHtml($(editor.doc.body).html())); 

        //change the input value with new clean string 
        $("#" + editor.$area[0].id).val($(editor.doc.body).html()); 
       }, 100); 
      }, 100); 
     }) 

我使用下面的removeHtml函數從粘貼的內容中刪除所有的HTML。

//remove html altogether 
function removeHtml(str) { 
    var regex = /(<([^>]+)>)/ig; 
    var result = str.replace(regex, ""); 
    return result; 
} 

此解決方案現已投入生產。