我一直在搜索整個SO和各種網站,我遇到了很多可能適合我的問題的答案,但我遇到了麻煩解決方案。快速回顧一下我想要的東西:JavaScript window.getSelection()無法弄清楚
- 我已經構建了一個富文本編輯器。
- 我需要正確處理附加了格式的「粘貼」數據。
- 我已禁用通過onpaste =「返回false」粘貼。
- 在Ctrl + V上,隱藏的textarea被賦予焦點,然後文本被用戶粘貼到那裏,然後textarea.value被採集並複製到編輯器(contentEditable div)。
- 我可以在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
嗨。感謝您的回覆,但我無法讓您的代碼正常工作。我一直在嘗試幾個小時,不知道該怎麼做。我在JavaScript方面有點新手,但是我已經通過鏈接到我的代碼的實時版本來編輯我的原始帖子,以便您可以看到究竟發生了什麼以及我想要實現的目標。如果你不能/不想看,謝謝你的時間。 – George88 2012-03-17 20:42:22