2012-03-17 206 views
2

我一直在搜索整個SO和各種網站,我遇到了很多可能適合我的問題的答案,但我遇到了麻煩解決方案。快速回顧一下我想要的東西:JavaScript window.getSelection()無法弄清楚

  1. 我已經構建了一個富文本編輯器。
  2. 我需要正確處理附加了格式的「粘貼」數據。
  3. 我已禁用通過onpaste =「返回false」粘貼。
  4. 在Ctrl + V上,隱藏的textarea被賦予焦點,然後文本被用戶粘貼到那裏,然後textarea.value被採集並複製到編輯器(contentEditable div)。
  5. 我可以在IE中做到這一點,但不是其餘。

我的問題是我不明白window.getSelection()對象如何適用於符合標準的瀏覽器。我想要的是將新粘貼的textarea.value通過JavaScript複製到我的編輯器中,同時保留焦點和光標(插入符號)位置。所以,閃爍的光標應該保留在粘貼的最後。

我寫了下面的代碼,高校檔案在IE這個目標,而不是休息:

function handle_paste_keydown(key) 
{ 
    if(
     (key.keyCode == 86 || key.charCode == 86) && 
     (key.keyCode == 17 || key.charCode == 17 || key.ctrlKey) // if "Ctrl+V" is pressed. 
    ) 
    { 
     var get_paste_selection_range; 

     if(document.selection) 
     { 
      get_paste_selection_range = document.selection.createRange();     
      document.getElementById("paste_textarea").style.display = "block"; 
      document.getElementById("paste_textarea").focus();    

      document.getElementById("paste_textarea").onkeyup = function() 
      { 
       // insert the .value of the textarea at the cursor position in the editor. 
       get_paste_selection_range.text += document.getElementById("paste_textarea").value;    
       document.getElementById("paste_textarea").style.display = "none"; 

       // retain focus and cursor position      
       get_paste_selection_range.select();   
      } 
     } 
     else if(window.getSelection())  
     { 
      document.getElementById("paste_textarea").style.display = "block"; 
      document.getElementById("paste_textarea").focus(); 

      document.getElementById("paste_textarea").onkeyup = function() 
      { 
       // How do I handle this? 
       document.getElementById("paste_textarea").style.display = "none"; 
      } 
     } 
    } 
document.getElementById("paste_textarea").value = ""; 
} 

藤誰能幫助?謝謝!

編輯:我已經添加了一個鏈接到現場版本,所以你可以看到發生了什麼事情。請在Internet Explorer以及其他瀏覽器中嘗試此操作,以便您可以看到究竟發生了什麼。注意:我已經在Ctrl + V上顯示了隱藏的textarea,所以您可以更好地瞭解正在發生的事情,按住Ctrl + V將該框保留在屏幕上。

http://gameprogrammingworkshop.com/Java/Stack%20Overflow%20Error!/index.php?id=null

回答

0
... 
else if (window.getSelection) { 
    var selection = window.getSelection(), 
     get_paste_selection_range = selection.getRangeAt(0); 
    var new_text = selection.toString() + document.getElementById("paste_textarea").value; 

    // retain your focus 
} 
+0

嗨。感謝您的回覆,但我無法讓您的代碼正常工作。我一直在嘗試幾個小時,不知道該怎麼做。我在JavaScript方面有點新手,但是我已經通過鏈接到我的代碼的實時版本來編輯我的原始帖子,以便您可以看到究竟發生了什麼以及我想要實現的目標。如果你不能/不想看,謝謝你的時間。 – George88 2012-03-17 20:42:22