【问题标题】:How to Achieve Just the Ctrl + A Functionality of Contenteditable Attribute?如何只实现Contenteditable属性的Ctrl+A功能?
【发布时间】:2015-12-18 17:07:50
【问题描述】:

我正在尝试为用户显示带有一些示例代码的 div。我希望他们能够在 div 内进行选择并使用 Ctrl + A 选择所有示例代码,但我不希望他们能够编辑实际文本(以免意外删除一点然后它不会工作)。

我现在通过在 div 上设置 contenteditable 来实现这一点,但是如何在没有实际文本编辑的情况下获得此属性的相同功能?

编辑:查看@Mr. Llamacomment 中链接的解决方案,我可以使用此方法来实现我正在寻找的主要功能。但是,如果可能的话,我想简单地允许我的用户熟悉的 Ctrl + A 命令,并且仍然允许手动突出显示 div 文本的 sn-ps。同样,同时禁止添加或删除任何文本。

【问题讨论】:

  • 您可以使用这样的解决方案,而不是要求用户按 Ctrl + A:stackoverflow.com/q/1173194/477563
  • 嗯,是的,我可以用这个!但是,如果用户仍然可以手动突出显示他们需要的 sn-p,但随后具有他们期望的 ctrl + A 功能,那么对于我的整体预期功能会更好。我知道我可以使用外部按钮说“复制所有代码”或其他内容,但对我来说这是次要的。当我想选择某个内容的全部内容时,我会立即转到 Ctrl + A 而不是“全部复制”按钮

标签: html


【解决方案1】:

当我阻止 onkeydownoncutonpaste 事件时,似乎对我有用。

for (const elm of document.getElementsByClassName('editable-not-editable')) {
  elm.setAttribute('contenteditable', true);
  elm.spellcheck = false;
  elm.oncut = () => false;
  elm.onpaste = () => false;
  elm.onkeydown = (event) => {
    if (event.metaKey || event.ctrlKey) {
      return;
    }
    event.preventDefault();
  }
}
<div class="editable-not-editable">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
  exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
  irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
  pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia 
  deserunt mollit anim id est laborum.
</div>

【讨论】:

  • 我仍然可以使用鼠标剪切/粘贴文本
  • 确实如此。您也可以打开开发工具并更改innerText
  • 编辑的问题是操作不希望用户不小心修改代码并复制它。打开开发工具和编辑不是什么大问题
  • 可以拦截oncutonpaste事件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2011-05-11
  • 2019-11-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多