javascript - 使用js,是否可以防止在按住Shift键单击其他地方时扩展文本选择

标签 javascript firefox

请不要将此问题报告为重复问题。我在 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/

相关文章:

java - 为什么浏览器找不到java插件?

javascript - 在 Firefox 和 IE 中向按钮添加填充会将其他按钮向下推

javascript - 拦截从 Firefox 插件上传的文件

internet-explorer - 内联 block : Firefox 4 vs IE 9

Javascript/Jquery 方法获取更改事件下拉列表的先前选择值

javascript - window.onload not defined - es2015 希望一切都是全局的

javascript - athena.getQueryExecution 返回 RUNNING 状态 1 分钟+,即使历史表明该作业耗时 4 秒

javascript - 获取输入元素的光标或文本位置(以像素为单位)

javascript通配符替换函数

javascript - 在迭代器上使用 map()