Ich habe ein contentEditable Div und möchte alle Formatierungen entfernen, insbesondere für das Kopieren und Einfügen von Text.
Formatierung aus einem contentEditable div entfernen
Isaac Limón
Sie können dem „Paste“-Ereignis einen Listener hinzufügen und den Inhalt der Zwischenablage neu formatieren. So:
let editableDiv = document.querySelector('div[contenteditable="true"]');
editableDiv.addEventListener("paste", function(e) {
e.preventDefault();
var text = e.clipboardData.getData("text/plain");
document.execCommand("insertHTML", false, text);
});
Hier ein weiteres Beispiel für alle Container im Body:
let allEditableDivs = document.querySelectorAll('div[contenteditable="true"]');
[].forEach.call(allEditableDivs, function (el) {
el.addEventListener('paste', function(e) {
e.preventDefault();
var text = e.clipboardData.getData("text/plain");
document.execCommand("insertHTML", false, text);
}, false);
}
Saludos.
-
Der Schlüssel zu dieser Antwort ist die Verwendung der API clipboardData.getData(“text/plain”). Ziemlich selbsterklärend, dachte ich. Weitere Informationen zur Zwischenablage-API finden Sie hier: w3.org/TR/clipboard-apis
– Paul McClean
27. Juni 2017 um 10:31 Uhr
-
Nett! Kann jemand ein paar Worte dazu hinzufügen, wie ‘document.execCommand(“insertHTML”, false, text);’ funktioniert? Ich rufe eine Methode für das Dokument auf, aber irgendwie fügt es an “der aktuellen Position” ein …
– andymel
28. April 2020 um 18:40 Uhr
-
Dies funktioniert beim Kopieren und Einfügen, aber ich habe festgestellt, dass Benutzer das Feld immer noch per Drag-and-Drop missbrauchen können.
– Mitch Talmadge
21. Mai 2021 um 18:50 Uhr
Sam Dutton
Hast du es mal mit InnerText versucht?
HINZUGEFÜGT:
Wenn Sie Markup von Inhalten entfernen möchten, die in das bearbeitbare Div eingefügt wurden, versuchen Sie es mit dem alten Hack zum Erstellen eines temporären Div – siehe Beispiel unten.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Strip editable div markup</title>
<script type="text/javascript">
function strip(html) {
var tempDiv = document.createElement("DIV");
tempDiv.innerHTML = html;
return tempDiv.innerText;
}
</script>
</head>
<body>
<div id="editableDiv" contentEditable="true"></div>
<input type="button" value="press" onclick="alert(strip(document.getElementById('editableDiv').innerText));" />
</body>
</html>
-
Wie würde ich die Formatierung aus dem kopierten und eingefügten Text entfernen, indem ich innerText verwende? Ich dachte, ich muss entweder etwas auf das contentEditable Div setzen oder die Formatierung aus der Zwischenablage entfernen, bevor der Text eingefügt wird. Danke für Ihre Hilfe.
– Garth Humphreys
1. August 2011 um 14:49 Uhr
-
Tut mir leid, ich habe nicht verstanden, dass Sie Text einfügen wollten hinein das bearbeitbare div. Siehe bearbeitete Antwort für Vorschläge zum Entfernen der Formatierung.
– Sam Dutton
1. August 2011 um 15:07 Uhr
-
Dadurch wird die Formatierung aus dem gesamten bearbeitbaren div entfernt, nicht nur aus dem eingefügten Material. Wenn das OP das möchte, könnte er stattdessen ein Textfeld verwenden.
– Tim unten
1. August 2011 um 22:06 Uhr
-
Ich baue einen Rich-Text-Editor und möchte eine Funktion implementieren, die die Formatierung eines ausgewählten Textes entfernt. Irgendeine Idee, wie man das macht? (Ich verwende ein contentEditable div)
– DAS NÜTZLICHE
13. Juni 2012 um 10:48 Uhr
-
Das ist genial! Habe gerade meinen Speck gerettet.
– Doug Wolfgram
12. Oktober 2013 um 5:28 Uhr
Daniel – SDS-Gruppe
Ich habe ewig nach einer Antwort darauf gesucht und am Ende meine eigene geschrieben.
Ich hoffe, das hilft anderen. Zum Zeitpunkt des Schreibens scheint es in ie9, dem neuesten Chrome und Firefox zu funktionieren.
<div contenteditable="true" onpaste="OnPaste_StripFormatting(this, event);" />
<script type="text/javascript">
var _onPaste_StripFormatting_IEPaste = false;
function OnPaste_StripFormatting(elem, e) {
if (e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) {
e.preventDefault();
var text = e.originalEvent.clipboardData.getData('text/plain');
window.document.execCommand('insertText', false, text);
}
else if (e.clipboardData && e.clipboardData.getData) {
e.preventDefault();
var text = e.clipboardData.getData('text/plain');
window.document.execCommand('insertText', false, text);
}
else if (window.clipboardData && window.clipboardData.getData) {
// Stop stack overflow
if (!_onPaste_StripFormatting_IEPaste) {
_onPaste_StripFormatting_IEPaste = true;
e.preventDefault();
window.document.execCommand('ms-pasteTextOnly', false);
}
_onPaste_StripFormatting_IEPaste = false;
}
}
</script>
-
Scheint großartig zu funktionieren und es behält die Zeilenumbruchformatierung bei. Vielen Dank! 🙂
– Benutzer2173353
29. Oktober 2015 um 14:13 Uhr
-
Aus irgendeinem Grund erhalte ich die Fehlermeldung „Ungültiges Argument“. auf IE8 mit diesem. Ich hatte einmal den Eindruck, dass es dort funktioniert, aber wahrscheinlich habe ich mich geirrt. Ich weiß nicht, ob ein anderes Ereignis (oder so etwas) die Dinge vermasselt … Ansonsten gut. 🙂
– Benutzer2173353
24. November 2015 um 7:00 Uhr
Robson Hermes
Ich weiß, es ist eine Weile her, aber ich hatte das gleiche Problem. In meinem Fall ist es eine GWT-Anwendung, um es noch schlimmer zu machen. Habe das Problem jedenfalls gelöst mit:
var clearText = event.clipboardData.getData('text/plain');
document.execCommand('inserttext', false, clearText);
Sehen: https://jsfiddle.net/erikwoods/Ee3yC/
Ich habe den Befehl “inserttext” anstelle von “insertHTML” bevorzugt, da die Dokumentation besagt, dass es genau zum Einfügen von reinem Text dient, also besser geeignet erscheint. Sehen https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
Versuchen <div id="editableDiv" contentEditable="plaintext-only"></div>
-
Es war eine automatische Nachricht aus einer Überprüfungswarteschlange. Ich glaube Ihnen. Ich habe die Nachricht gelöscht.
– Azametzin
22. Februar 2020 um 12:00 Uhr
-
Ich würde das gerne verwenden, aber es ist (noch) nicht weit verbreitet. caniuse.com/…
– Justin Stolle
8. Juni 2020 um 20:23 Uhr
-
Keine Unterstützung in Firefox. Im Moment kommt man nicht drum herum
true
wenn Sie alle Browser unterstützen wollen und sich mit einer Javascript-Lösung anfreunden müssen. 🙁– qräbnö
26. April 2021 um 21:26 Uhr
Justo
Mit Jquery können Sie verwenden .Text() Methode, sodass Sie beispielsweise beim Weichzeichnen den Inhalt durch den Textinhalt ersetzen können
$("#element").blur(function(e) {
$(this).html($(this).text());
});
-
Es war eine automatische Nachricht aus einer Überprüfungswarteschlange. Ich glaube Ihnen. Ich habe die Nachricht gelöscht.
– Azametzin
22. Februar 2020 um 12:00 Uhr
-
Ich würde das gerne verwenden, aber es ist (noch) nicht weit verbreitet. caniuse.com/…
– Justin Stolle
8. Juni 2020 um 20:23 Uhr
-
Keine Unterstützung in Firefox. Im Moment kommt man nicht drum herum
true
wenn Sie alle Browser unterstützen wollen und sich mit einer Javascript-Lösung anfreunden müssen. 🙁– qräbnö
26. April 2021 um 21:26 Uhr
Gemeinschaft
Sie können nicht auf die Zwischenablage des Systems zugreifen, also brauchen Sie einen Hack. Siehe diese Frage: JavaScript ruft Daten aus der Zwischenablage beim Einfügeereignis ab (browserübergreifend)
mögliches Duplikat von Sanitize/Rewrite HTML auf der Client-Seite
– David Jarvis
30. September 2013 um 3:59 Uhr
Sie können verwenden entfernenFormat mit dem execBefehl Methode https://developer.mozilla.org/es/docs/Web/API/Document/execCommand
– Federico Rocha
13. März 2020 um 18:22 Uhr