Formatierung aus einem contentEditable div entfernen

Lesezeit: 5 Minuten

Ich habe ein contentEditable Div und möchte alle Formatierungen entfernen, insbesondere für das Kopieren und Einfügen von Text.

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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


Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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)

1177360cookie-checkFormatierung aus einem contentEditable div entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy