请不要将此问题报告为重复问题。我在 stackoverflow 上看到过类似的问题,但它们没有满足我的具体需求。
我在网页上选择并突出显示了一些文本,我希望能够在不扩展文本选择的情况下按住 Shift 键并单击离开所选文本。
我创建了一个函数,每当按下 Shift 键时,该函数都会将变量 shiftkey 设置为 true,并且我还有另一个在单击鼠标时调用的函数。后一个函数测试 shiftkey var 是否设置为 true 以确定是否有 Shift-click 事件。如果是这样,我想 e.preventDefault(); 会阻止扩展所选文本,但事实并非如此!
使用
document.getElementsByTagName("body").style.userSelect = "none";
后跟
window.getSelection().toString();
最后
document.getElementsByTagName("body").style.userSelect = "auto";
也不起作用!
有什么想法可以让它发挥作用吗?
最佳答案
我通过阅读 this page about the selection 找到了问题的解决方案对象和 this page about the range object .
我必须将原始选择分配给一个范围并将其保存到一个变量中。
var sel = window.getSelection();
var range = sel.getRangeAt(0);
然后,在按住 Shift 键并单击后,选择范围将扩展,因此我必须使用以下任一方法清空选择范围:
sel.empty();
或
sel.removeAllRanges();
此后,我可以使用以下方法将原始保存的范围添加到空选择中:
sel.addRange(range);
关于javascript - 使用js,是否可以防止在按住Shift键单击其他地方时扩展文本选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50707584/