2012-07-02 51 views

回答

0

新版本:http://jsfiddle.net/Kxmaf/218/

你是對setTimeout(),不知道該事件延遲。現在 ,我看到FF,即document.execCommand()是有點越野車,所以我簡化了很多(沒有更多的精力,將execCommand):

$editor.on('paste, keydown', function() { 
    var $self = $(this);    
    setTimeout(function(){ 
     var $content = $self.html();    
     $clipboard.val($content); 
    },100); 
}); 

如何:http://jsfiddle.net/Kxmaf/215/

$editor.on('paste, keydown', function() { 
    var $self = $(this), 
     $content = $self.html();  
    $clipboard.val('').focus(); 
    document.execCommand('insertHTML', false, $content); 
    $self.html($content); 
    placeCaretAtEnd($self);     
}); 

沒有更多setTimeout()。 我也加了keydown,因爲它對我來說聽起來更好;)如果你願意的話,你可以刪除它。 這確實:

  • 花費#內容
  • 刪除textarea的內容的內容,並重點關注一下。
  • 插入來自#內容內容到textarea的
  • #替換內容的內容的情況下,它卡梅斯刪除或替換(這是我測試的一部分,我不知道現在$self.html($content);是相關的。
  • 與重點在插入符號的#內容結束。

placeCaretAtEnd()來自https://stackoverflow.com/a/4238971/460368我修改了一點。

+0

不幸的是你的榜樣是行不通的。它把內容輸入到該textarea的,但不是到可編輯的div :(textarea就是這樣一個幫手,它應該關注'粘貼'並清除輸入,並將內容放回div。 – Aley

+0

新代碼不能工作:(腳本應該做的是清理剪貼板內容,貼上textarea時應該抓住焦點,瀏覽器將內容粘貼到textarea中,100 ms後textarea中清理過的內容應該被複制回可編輯的div。 – Aley