Typescript getSelection 消失
Typescript getSelection disappear
在 Vue 和 typescript 中,我有自己的上下文菜单:
<context-menu id="context-menu" ref="ctxMenu">
<li @click="ctxMenuClickItem1($event)" v-on:mouseover="menuItemMouseover($event)" v-on:mouseleave="menuItemMouseleave($event)" v-bind:style="getMenuItemStyle()" >Open in TMS</li>
<li @click="ctxMenuClickItem2($event)" v-on:mouseover="menuItemMouseover($event)" v-on:mouseleave="menuItemMouseleave($event)" v-bind:style="getMenuItemStyle()" >Open in OnDemand</li>
<li @click="doCopy()" >Copy</li>
</context-menu>
当我在页面上选择文本然后单击上下文菜单中的第三项 (doCopy) 时,选择消失了。
复制功能看起来像这样:
doCopy: function () {
debugger;
var selection = window.getSelection();
},
点击后选择为空:selection.toString() is ""
如何复制选中的文字?
当您在上下文菜单中单击时,您的 selection 正在折叠(或重置)可能是因为移动了焦点。你需要在'contextmenu'事件触发时得到一个selection,并在doCopy中恢复selection。
JS 示例:
var range = document.createRange();
docucment.addEventListener('contextmenu', (ev) => {
let selection = window.getSelection();
if(selection.rangeCount > 0) {}
range = selection.getRangeAt(0);
})
doCopy = function(){
let selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
document.execCommand('copy');//save selection in buffer
}
如果您 select 在 contenteditable 元素中输入文本,则需要在该元素中设置焦点。
在 Vue 和 typescript 中,我有自己的上下文菜单:
<context-menu id="context-menu" ref="ctxMenu">
<li @click="ctxMenuClickItem1($event)" v-on:mouseover="menuItemMouseover($event)" v-on:mouseleave="menuItemMouseleave($event)" v-bind:style="getMenuItemStyle()" >Open in TMS</li>
<li @click="ctxMenuClickItem2($event)" v-on:mouseover="menuItemMouseover($event)" v-on:mouseleave="menuItemMouseleave($event)" v-bind:style="getMenuItemStyle()" >Open in OnDemand</li>
<li @click="doCopy()" >Copy</li>
</context-menu>
当我在页面上选择文本然后单击上下文菜单中的第三项 (doCopy) 时,选择消失了。
复制功能看起来像这样:
doCopy: function () {
debugger;
var selection = window.getSelection();
},
点击后选择为空:selection.toString() is ""
如何复制选中的文字?
当您在上下文菜单中单击时,您的 selection 正在折叠(或重置)可能是因为移动了焦点。你需要在'contextmenu'事件触发时得到一个selection,并在doCopy中恢复selection。 JS 示例:
var range = document.createRange();
docucment.addEventListener('contextmenu', (ev) => {
let selection = window.getSelection();
if(selection.rangeCount > 0) {}
range = selection.getRangeAt(0);
})
doCopy = function(){
let selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
document.execCommand('copy');//save selection in buffer
}
如果您 select 在 contenteditable 元素中输入文本,则需要在该元素中设置焦点。