div 内容可编辑但只读

div contentEditable but Readonly

我有一个 div 和一些文本,当光标悬停在 div 到 select 文本时,我想要。如果我让这个 div 保持原样,当我尝试 select 全部 (CTRL+A) 时,我会 select 所有页面内容,即所有正文。

为了摆脱这个,我需要为此使用 contenteditable 属性 div。

但我不想让人改文/复制/剪切等等

我尝试为此使用只读 div,但不起作用。

有什么建议吗?

PS1:这个div里面还有其他标签(html内容),但我认为这不是问题。

PS2:这里有一个例子:jsfiddle.net/msakamoto_sf/wfae8hzv/ - 但有一个问题。你可以剪切文本:(

要防止 ctrl + x(剪切)来自 div 您需要使用以下 JQuery :

if (event.ctrlKey && event.keyCode === 88) 
{
   return false;
}

它将阻止从 div 中剪切文本。

勾选Fiddle Here.

您可以通过处理"cut"事件并调用它的preventDefault()方法来阻止用户剪切。这将防止通过任何用户输入(包括浏览器的上下文菜单或编辑菜单)进行剪切,而不仅仅是通过特定的组合键。

此示例使用 jQuery 因为您的 jsFiddle 使用它:

$("#editablediv").on("cut", function(e) {
    e.preventDefault();
});

将 contenteditable 设置为 false,它应该可以工作!!就这么简单。

使用 div 的 contenteditable 属性使其可编辑或不可编辑 并对表单输入元素使用只读属性。

<element contenteditable="true|false">

<input readonly="readonly" />

keydown 事件中使用 event.metaKey 检查是否按下了 ctrl(或 mac 上的 cmd)键。您还必须禁用 cutpaste 事件。

<div
  contenteditable="true"
  oncut="return false"
  onpaste="return false"
  onkeydown="if(event.metaKey) return true; return false;">
    content goes here
</div>

对于 JavaScript,

document.getElementById(divid).contentEditable = "false";

这会起作用

这是 React 中的一个示例,但它也适用于基本 HTML 和 JavaScript,因为我只是利用默认事件。

// import CSS
import './DefaultSettings.css';

// import packages
import React, { Component } from 'react';

// import components

const noop = (e) => {
  e.preventDefault();
  return false;
};

class DefaultSettings extends Component {
  render() {
    return (
      <div className="DefaultSettings"
        contentEditable={true}
        onCut={noop}
        onCopy={noop}
        onPaste={noop}
        onKeyDown={noop}>
      </div>
    );
  }
}

export default DefaultSettings;

在用户 ID 条件下设置 contentEditable="false"