2010-08-24 81 views
4

我需要能夠允許用戶粘貼到可編輯的div(通過用戶選擇的任何內容:右鍵單擊並粘貼,快捷鍵等),但我想放棄格式化,並只採取純文本。只將純文本粘貼到可編輯div

我不能使用textarea,因爲如果由用戶啓動的事件應用,div將允許基本格式(粗體和斜體)。

onbeforepaste事件看起來很有希望,但根據quirksmode的支持是如此有限,以至於無法使用。

tyia的任何建議

+0

感謝兩個 - 應該讓我朝着正確的方向努力標記的答案是有用的,但顯然我太新:/ – momo 2010-08-24 11:19:11

+0

可能重複[在execCommand中粘貼爲純文本的JavaScript技巧](https://stackoverflow.com/questions/12027137/javascript-trick-for-paste-as-plain-text-in-execcommand) – user 2017-11-30 22:07:21

回答

1

這是棘手,但並非不可能。你可以做的事情非常複雜,並且可能會在Firefox 2 +,IE 5.5+和最近的WebKit瀏覽器(例如Safari 4或Chrome)(未在舊版本中測試過)中發揮作用。兩者的TinyMCE和CKEditor的最近版本的使用他們的基於iframe的編輯器這種技術:

  1. 使用按鍵事件處理
  2. 在該處理程序檢測CTRL-V /移INS事件,保存當前用戶選擇,在屏幕外添加一個textarea元素(比如在左邊-1000px),關閉contentEditable並在textarea上調用focus(),從而移動插入符號並有效地重定向粘貼
  3. 設置一個非常簡短的計時器(比如說1毫秒),以調用另一個存儲textarea值的函數,從文檔中刪除textarea,重新打開contentEditable,恢復用戶選擇並粘貼文本。

請注意,這僅適用於鍵盤粘貼事件,不適用於上下文或編輯菜單中的粘貼。 paste事件會更好,但在它觸發的時候,將脫字符重定向到textarea(至少在某些瀏覽器中)爲時已晚。

1

對於Ctrl + v我檢查了keyup上可編輯div的內容。您可以在該事件中修改內容。我正在使用nicedit文本編輯器。 這從右鍵點擊→粘貼不起作用。 對於'貼'我不得不修改內容使用settimeout

.addEvent('paste', function(e) { 
     setTimeout(function(){ 
      if(condition){ 
       //modify content 
      } 
     },350); 
    }); 
1

它也可以通過使用javaScript入侵。希望這有助於

我創建了一個例子here

<div contentEditable="true" id="clean-text-div"> </div> 
<div id="clean-btn"> Clean Me</div> 
<div id="message"> paste html content and clean background HTML for pure text</div> 


$("#clean-btn").click(function(){ 
    $("#clean-text-div").text($("#clean-text-div").text()); 
    $("#message").text("Your text is now clean"); 
}); 
相關問題