Приносим извинения, если я заявляю здесь очевидное - я понимаю, что это не полностью решает вашу проблему, - но вы могли бы что-то сделать с событием вставки , где вы берете данные события вставки как текст и установите для этого внутреннее HTML элемента.
Этот подход может не сохранять пустое пространство так, как вы намереваетесь. Скелетная реализация ниже заменяет содержимое всего элемента, но вы могли бы что-то сделать с помощью getSelection , чтобы исправить это, если бы вы пошли по этому маршруту:
function onPaste (e) {
e.preventDefault(); // stop the paste
const t = e.clipboardData.getData("text"); // grab the pasted content as plain text
e.target.innerHTML = t; // set the element's innerHTML to the plain text
}
const p = document.getElementById('test');
p.addEventListener('paste', onPaste);
pre {
min-height: 200px;
outline: none;
font-family: monospace;
white-space: pre;
background-color: rgb(19, 22, 27);
color: #98d8e7;
}
Другой подобной возможностью было бы пропустить вставку go, затем сразу же захватить содержимое элемента и вырезать все форматирование. Это кажется более сложным подходом, но он даст вам возможность провести более хирургическую очистку.
function onPaste (e) {
// setTimeout to wait for the paste to complete
setTimeout(() => {
// do something with p.innerHTML or p.innerText;
console.log(e.target.innerHTML);
}, 0);
}