var ce = document.querySelector('[contenteditable]')
ce.addEventListener('paste', function (e) {
e.preventDefault()
var text = e.clipboardData.getData('text/plain')
document.execCommand('insertText', false, text)
})
// Edited from https://htmldom.dev/paste-as-plain-text/
const editable_div = document.getElementById('editable_div');
// Handle the paste event
editable_div.addEventListener('paste', function (e) {
// Prevent the default action
e.preventDefault();
// Get the copied text from the clipboard
const text = e.clipboardData
? (e.originalEvent || e).clipboardData.getData('text/plain')
: // For IE
window.clipboardData
? window.clipboardData.getData('Text')
: '';
// Insert text at the current position of caret
const range = document.getSelection().getRangeAt(0);
range.deleteContents();
const textNode = document.createTextNode(text);
range.insertNode(textNode);
range.selectNodeContents(textNode);
range.collapse(false);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
});
<div id="editable_div" contenteditable="true">
You can only paste plain text into me!
</div>
<div class="ediatable-div" contenteditable="true" data-text="Paste copied HTML here"></div>
<div>
<p style="text-decoration:underline">Copy <strong>me</strong>, I have <em>style</em>!</p>
</div>
// 1. Paste plain text only into contenteditable elements
document.addEventListener("paste", function (e) {
if (e.target.isContentEditable) {
e.preventDefault();
var text = e.clipboardData.getData('text/plain')
document.execCommand('insertText', false, text)
}
});
// 2. Prevent any paste into contenteditable elements
document.addEventListener("paste", function (e) {
if (e.target.isContentEditable) {
e.preventDefault();
return false;
}
});
5条答案
按热度按时间yxyvkwin1#
当你粘贴富格式内容时,它将显示为富格式内容,所以你需要捕获粘贴事件,阻止默认操作,并从剪贴板读取文本。
p3rjfoxz2#
以下解决方案适用于要粘贴到的字段中已有文本的情况,并且不使用已弃用的
document.execCommand()
函数。xsuvu9jc3#
您可以拦截“paste”事件并替换目标的内容。
zazmityj4#
当contenteditable元素可能被动态添加到DOM时,有一个文档级处理程序是很有用的,一旦添加到DOM,它将检测未来的示例以及现有的示例。
oaxa6hgo5#
WebKit-based browsers支持一个非标准
user-modify
CSS属性:这样就不需要使用过时的
execCommand
API或容易出错的步骤来正确定位插入符号。x一个一个一个一个x一个一个二个x
有一个奇怪的行为:通过双击选择的复制粘贴文本可能会引入额外的前导和/或尾随空格(至少在macOS上)。
要支持非WebKit浏览器,您仍然需要侦听
paste
事件,例如:这两种方法是有区别的,请自行判断。