【问题标题】:Is it possible to restrict the range of select all/Ctrl+A?是否可以限制全选/Ctrl+A的范围?
【发布时间】:2014-08-24 13:13:08
【问题描述】:

我在一个网站上工作,我希望能够显示一个包含语法高亮源代码的框供用户复制。当我单击该框,使其获得焦点(Chrome 显示其焦点轮廓)并键入 Ctrl+A 时,将选择整个页面的文本,而我只想要语法突出显示的源选中框内的代码。

是否可以将 select all/Ctrl+A 的范围限制为仅框中的文本,最好不使用

我的第一个想法是尝试contenteditable。当我在框中单击并出现编辑器插入符号时,键入 Ctrl+A 只会根据需要选择框中的文本,但它也允许用户更改代码,我认为制作框contenteditable 的编辑器界面方面会让用户感到困惑。如果我将源代码文本包装在具有 contenteditable="false"

中,而
具有 contenteditable="true",则源代码文本是只读的,但键入 Ctrl+A 会选择再次显示整个页面的文本。

这是一个测试页面:http://jsfiddle.net/5crgL/

【问题讨论】:

  • 使用 jwerty 覆盖 [ctrl]+[a] 上发生的情况? => keithcirkel.co.uk/jwerty
  • 有点叫“全选”,所以限制范围不再是“全选”了,对吗? ;)
  • 为什么不使用禁用的文本区域之类的东西?
  • @Linus:我希望文本语法突出显示。

标签: javascript html selection contenteditable


【解决方案1】:

您可以使用document.createRange(); 方法从特定元素中选择文本。 处理 ctrl+a 可以使用 jQuery keydown 方法,并且可以调用 JS 代码来选择 DIV 文本。

var range = document.createRange();
range.selectNode(document.getElementById(containerid));
window.getSelection().addRange(range);

请在此处查看jsfiddle jsfiddle

【讨论】:

  • 你的解决方案唯一的问题是,无论用户在哪里,它只选择容器中的文本。可能应该有一个鼠标侦听器来获取鼠标位置,并且只有在鼠标悬停在容器内部/上方时才抓取容器文本。
  • 为此,您可以使用 jQuery is(':hover') 来检测鼠标是否悬停在 DIV 上。请查找更新jsfiddlejsfiddle.net/5crgL/5
  • 您也可以匹配某个组合键,但热键可能不同。例如 Mac 使用 cmd + a 或者用户甚至可以配置自己的热键。
  • 在 Windows 上完美运行。在 Mac 上,存在一个问题,即这不适用于 ⌘A,但我认为只需要稍作调整即可。
  • 是的,您可以通过识别操作系统和浏览器来调整代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2020-11-25
  • 1970-01-01
  • 2011-10-04
  • 2013-10-11
  • 2019-01-23
  • 2015-09-20
相关资源
最近更新 更多