使用js,可以防止文本选择在其他地方按住Shift键时延伸

时间:2018-06-05 19:26:57

标签: javascript firefox

请不要将此问题报告为重复。我在stackoverflow上看到了类似的问题,但它们没有满足我的特定需求。

我在网页上选择并突出显示了一些文字,我希望能够在不扩展文本选择的情况下点击选定的文字。

我已经创建了一个函数,只要按下shift键就可以将变量shift键设置为true,并且我有另一个在鼠标单击时调用的函数。后一个函数测试shiftkey var是否设置为true以确定我是否有shift-click事件。如果是这样,我想e.preventDefault(); 会阻止扩展所选文本,但它不会!

使用

document.getElementsByTagName("body").style.userSelect = "none";

接着是

window.getSelection().toString();

最后

document.getElementsByTagName("body").style.userSelect = "auto";

也不起作用!

任何想法如何才能起作用?

1 个答案:

答案 0 :(得分:1)

我通过阅读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);