Javascript 单击div,获取插入符号,用相同的内容替换div,contenteditable=true,然后将插入符号选择放在单击的位置
我试图用contenteditable=true copy替换div,然后在一次单击中关注第二个divJavascript 单击div,获取插入符号,用相同的内容替换div,contenteditable=true,然后将插入符号选择放在单击的位置,javascript,selection,contenteditable,svelte,caret,Javascript,Selection,Contenteditable,Svelte,Caret,我试图用contenteditable=true copy替换div,然后在一次单击中关注第二个div 让我们聚焦=错误; {#如果!专注} { 专注=正确; }}> 我的同僚们都是精英。选择权的责任,发明人阿迪皮斯·埃乌斯·沃鲁帕特,权贵们的行为,阻碍了新的生命之光的实现,阻碍了目标的实现? {:else} { 聚焦=假; }}> 我的同僚们都是精英。选择权的责任,发明人阿迪皮斯·埃乌斯·沃鲁帕特,权贵们的行为,阻碍了新的生命之光的实现,阻碍了目标的实现? {/if} 我怎样才能做到这一
让我们聚焦=错误;
{#如果!专注}
{
专注=正确;
}}>
我的同僚们都是精英。选择权的责任,发明人阿迪皮斯·埃乌斯·沃鲁帕特,权贵们的行为,阻碍了新的生命之光的实现,阻碍了目标的实现?
{:else}
{
聚焦=假;
}}>
我的同僚们都是精英。选择权的责任,发明人阿迪皮斯·埃乌斯·沃鲁帕特,权贵们的行为,阻碍了新的生命之光的实现,阻碍了目标的实现?
{/if}
我怎样才能做到这一点呢?我已经用这个函数解决了这个问题
function getCaretIndex(element) {
let position = 0;
const isSupported = typeof window.getSelection !== "undefined";
if (isSupported) {
const selection = window.getSelection();
if (selection.rangeCount !== 0) {
const range = window.getSelection().getRangeAt(0);
const preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
position = preCaretRange.toString().length;
}
}
return position;
}
请去读一读。与您的问题相关的代码直接属于您的问题内部(以文本形式&格式正确;或者在有意义的情况下作为堆栈片段),而不仅仅是转储到外部平台上。@CBroe howbowdah您必须通过单击手动计算插入符号的位置。只要让它始终处于内容可编辑状态…@Akxe问题是
window.getSelection()
返回内部节点已破坏的范围对象:\n在您的位置上,我会一直使div内容可编辑。可切换的好处是什么?