Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:滚动光标在contenteditable div中发布粘贴_Javascript_Html - Fatal编程技术网

Javascript:滚动光标在contenteditable div中发布粘贴

Javascript:滚动光标在contenteditable div中发布粘贴,javascript,html,Javascript,Html,我有一个contenteditable属性值设置为true的div。当我在这个contenteditable中粘贴一些文本时,我能够将鼠标位置保持在粘贴文本的末尾。粘贴大量文本时,文本可能溢出可见区域。请注意,如果宽度固定,元素将沿Y方向滚动 我不知道如何在粘贴后确定光标(而不是鼠标)的Y位置,以便滚动到该位置。粘贴不一定总是在最后进行,所以滚动到底部并不是在所有情况下都有帮助 如果您对此有任何提示,我们将不胜感激。const-scrollSelectionIntoView=()=>{ //获取

我有一个contenteditable属性值设置为true的div。当我在这个contenteditable中粘贴一些文本时,我能够将鼠标位置保持在粘贴文本的末尾。粘贴大量文本时,文本可能溢出可见区域。请注意,如果宽度固定,元素将沿Y方向滚动

我不知道如何在粘贴后确定光标(而不是鼠标)的Y位置,以便滚动到该位置。粘贴不一定总是在最后进行,所以滚动到底部并不是在所有情况下都有帮助

如果您对此有任何提示,我们将不胜感激。

const-scrollSelectionIntoView=()=>{
//获取当前选择
const selection=window.getSelection();
//检查是否有选择范围
如果(!selection.rangeCount){
返回;
}
//获取第一个选择范围。几乎没有比这更多的选择(而不是firefox)
const firstRange=selection.getRangeAt(0);
//有时,如果将可编辑元素从dom中删除,则safari中可能会出现HierarchyRequest错误
if(firstRange.commonAncestorContainer===文档){
返回;
}
//创建一个空br,用作滚动的锚定,因为仅使用文本节点是不可能的
const tempancorel=document.createElement('br');
//将br置于插入符号位置的正后方
insertNode(tempancorel);
//滚动到br。我个人更喜欢添加block end选项,但如果您想使用“start”代替,只需将br替换为span即可
tempancorel.scrollIntoView({
块:'结束',
});
//移除锚,因为不再需要它了
tempancorel.remove();
};

trix editor对我来说效果很好