2010-08-19 99 views
2

我想在貼上tinymce編輯器時去掉所有的html標籤。以下是不是功能的代碼...以下是tinymce設置... paste_preprocess回調不會激怒...我缺少一些選項..?paste_preprocess tinymce問題

tinyMCESettings = [ { 
     mode : "none,textareas", 
     height:heightEditor, 
     width:'100%', 
     plugins: "paste", 
     theme : "advanced", //skin : "wp_theme", 
     theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter", 
     relative_urls : "true", 
     paste_use_dialog : false, 
     paste_auto_cleanup_on_paste : false, 
     content_css: styleSheetToLoadForTinyMCE + "?" + new Date().getTime(), 
     force_p_newlines: false, 
     setup: function (ed) { 
      ed.onInit.add(
       function (ed, evt) { 
        //resizeFrame1(); 
        var a = tinyMCE.get(ed.id).getContent(); 
        if(a.indexOf("hcRestrictedMode", 0) > 0){ 
         ed.getDoc().designMode = "off"; 
         setTimeout(function(){ 
          tinyMCE.activeEditor.dom.setAttrib(tinyMCE.activeEditor.dom.select(".hcEditable"), 'contenteditable', 'true'); 
         }, 1000); 
        } 
       }); 
     }, 
     paste_preprocess : function(pl, o) { 
      // Content string containing the HTML from the clipboard 
      alert(o.content); 
      o.content = o.content.replace(/<.+?>/,""); 
     }, 
     paste_postprocess : function(pl, o) { 
      // Content DOM node containing the DOM structure of the clipboard 
      alert(o.content) 
      o.content = o.content.replace(/<.+?>/,""); 
     } 
    }]; 

幫助這裏... 事先日Thnx ...

回答

3

以下是解決問題的代碼。

paste_preprocess : function(pl, o) { 
      // Content string containing the HTML from the clipboard 
      var str = o.content; 
      var ta = document.createElement("textarea"); 
      ta.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;"); 
      o.content = CleanWordHTML(ta.value); 
}, 
paste_postprocess : function(pl, o) { 
}, 

CleanWordHTML(ta.value);是用戶定義的函數,其中的html字符串是提取正則表達式。

+0

CleanWordHTML的任何參考實現可用? – 2014-12-27 00:46:03

4

下面是配置代碼:

paste_preprocess : function(pl, o) { 
    alert('pasteprocess startet'); 
    o.content = strip_tags(o.content,''); 
    //o.content = strip_tags(o.content,'<b><u><i><p><br><img>'); // use this i.e. to keep some tags 
    alert('pasteprocess ended - function strip_tags found and used'); 
}, 

這裏是

function strip_tags (str, allowed_tags) { 
    // Strips HTML and PHP tags from a string 
    // 
    // version: 1006.1915 
    // discuss at: http://phpjs.org/functions/strip_tags // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Luke Godfrey 
    // +  input by: Pul 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman // +  input by: Alex 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Marc Palau 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Eric Nagel 
    // +  input by: Bobby Drake 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Tomasz Wesolowski // *  example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>'); 
    // *  returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>' 
    // *  example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>'); 
    // *  returns 2: '<p>Kevin van Zonneveld</p>' 
    // *  example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>"); // *  returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>' 
    // *  example 4: strip_tags('1 < 5 5 > 1'); 
    // *  returns 4: '1 < 5 5 > 1' 
    var key = '', allowed = false; 
    var matches = []; var allowed_array = []; 
    var allowed_tag = ''; 
    var i = 0; 
    var k = ''; 
    var html = ''; 
    var replacer = function (search, replace, str) { 
     return str.split(search).join(replace); 
    }; 
    // Build allowes tags associative array 
    if (allowed_tags) { 
     allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi); 
    } 
    str += ''; 

    // Match tags 
    matches = str.match(/(<\/?[\S][^>]*>)/gi); 
    // Go through all HTML tags 
    for (key in matches) { 
     if (isNaN(key)) { 
      // IE7 Hack 
      continue;  } 

     // Save HTML tag 
     html = matches[key].toString(); 
     // Is tag not in allowed list? Remove from str! 
     allowed = false; 

     // Go through all allowed tags 
     for (k in allowed_array) {   // Init 
      allowed_tag = allowed_array[k]; 
      i = -1; 

      if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}   if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');} 
      if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag) ;} 

      // Determine 
      if (i == 0) {    allowed = true; 
       break; 
      } 
     } 
     if (!allowed) { 
      str = replacer(html, "", str); // Custom replace. No regexing 
     } 
    } 
    return str; 
} 
使用的功能(從 here拍攝)

編輯: set paste_auto_cleanup_on_paste爲真,它會工作(檢查您的配置在我的系統中)

+0

thnx aloadz的回覆... 實際上,正則表達式是OK ...我是否缺少tinymce配置中的某些內容,因爲paste_preprocess回調不會在編輯器中粘貼某些內容時觸發...? – 2010-08-19 12:40:11

+0

你說粘貼插件被激活,然後確保該函數是全局可調用的。 – Thariama 2010-08-19 14:19:30

+0

我在tinymce初始化函數中使用了paste_preprocess回調函數......並且此初始化函數駐留在全局可調用的函數中...仍然存在問題...檢出鏈接... http:// wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste – 2010-08-20 09:37:51