SOURCE

console 命令行工具 X clear

                    
>
console
    document.querySelector('.selectable-div').addEventListener('keydown', function(event) {
      console.log("keydown")

      if (event.ctrlKey && (event.key === 'a' || event.key === 'A')) {
        // 允许Ctrl+C复制
        return;
      }
      if (event.ctrlKey && (event.key === 'c' || event.key === 'C')) {
        // 允许Ctrl+C复制
        return;
      }
      // 阻止所有按键事件,防止用户改内容
      event.preventDefault();
    });


    // 禁止输入法切换
    document.querySelector('.selectable-div').addEventListener('compositionstart', function(event) {
      event.preventDefault();
    });


    document.querySelector('.selectable-div').addEventListener('paste', function(event) {
      // 阻止粘贴事件
      event.preventDefault();
    });
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Selectable but Non-editable Div</title>
  <style>

  </style>
</head>
<body>
  <div class="selectable-div" contenteditable="true">
    <span style="color: red;">aaa</span>
    <span style="font-weight: bold;">bbb</span>
    <span style="font-style: italic;">ccc</span>
    ddd
  </div>


</body>
</html>
.selectable-div {
  width: 300px;
  min-height: 30px;
  border: 1px solid #ccc;
  padding: 5px;
  border-radius: 4px;
  /* user-select: text; */ /* 允许文本选择 */
}