gpt4 book ai didi

JavaScript window.getSelection() 搞不定

转载 作者:行者123 更新时间:2023-11-30 06:42:37 25 4
gpt4 key购买 nike

我一整天都在搜索 SO 和各种网站,发现了很多可能正好适合我的问题的答案,但我在实现解决方案时遇到了麻烦。快速概述我要实现的目标:

  1. 我构建了一个富文本编辑器。
  2. 我需要正确处理附加了格式的“粘贴”数据。
  3. 我已通过 onpaste = "return false"禁用粘贴。
  4. 在 Ctrl+V 上,一个隐藏的文本区域获得焦点,然后用户将文本粘贴到那里,然后获取 textarea.value 并将其复制到编辑器(contentEditable div)。
  5. 我可以在 IE 中执行此操作,但不能执行其他操作。

我的问题是我不明白 window.getSelection() 对象如何在符合标准的浏览器中工作。我想要的是通过 JavaScript 将新粘贴的 textarea.value 复制到我的编辑器中,同时保留焦点和光标(插入符号)位置。因此,闪烁的光标应保留在粘贴的末尾。

我已经编写了以下代码来在 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 上可见,以便您可以更好地了解正在发生的事情,按住 Ctrl+V 可使该框保持在屏幕上。

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

最佳答案

...
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
}

关于JavaScript window.getSelection() 搞不定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com