Fügen Sie den Inhalt als einfachen Text in den Summernote-Editor ein

Lesezeit: 4 Minuten

Benutzer-Avatar
Revathy kr

Ich muss einige Inhalte in meinen Summernote-Editor kopieren und einfügen. Aber wenn ich sie einfüge, übernimmt sie den Stil der Seite, von der ich sie kopiert habe. Ich muss sie als einfachen Text einfügen. Gibt es eine Lösung?

Benutzer-Avatar
jcuenod

Verwenden Sie die onPaste Zurückrufen

Verwenden Sie die onPaste Option zum Definieren eines Rückrufs, der die Tags entfernt und den Text manuell einfügt.

$editor.summernote({
    onPaste: function (e) {
        var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
        e.preventDefault();
        document.execCommand('insertText', false, bufferText);
    }
});

Anerkennung: https://github.com/summernote/summernote/issues/303

Firefox-Probleme lösen:

Möglicherweise haben Sie immer noch Probleme mit Firefox. Wenn ja, wickeln document.execCommand in einer Timer-Funktion, um ihre Ausführung ein wenig zu verzögern:

setTimeout(function(){
    document.execCommand( 'insertText', false, bufferText );
}, 10);

Update für v0.7.0+

Die Position von Rückrufen in Optionen wurde nach v0.7.0 geändert
Nach v0.7.0 sollten alle Rückrufe durch das Rückrufobjekt umschlossen werden. (Quelle)

Das bedeutet, dass der ursprüngliche Code geschrieben werden sollte als

$editor.summernote({
    callbacks: {
        onPaste: function (e) {
            var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
            e.preventDefault();
            document.execCommand('insertText', false, bufferText);
        }
    }
});

Dank an Mathieu Castets für den Hinweis (wenn dieses Bit also geholfen hat, stimmen Sie seiner Antwort zu!)

TL;DR: Hier ist eine Funktion Demo

  • Ich habe dasselbe versucht. Aber das Onpaste-Ereignis wird nicht ausgelöst.

    – Revathy kr

    24. Juni 2015 um 10:21 Uhr

  • Hattest du Glück mit dem Update? Ich habe eine funktionale Demo hinzugefügt (obwohl einige Dinge von Drittanbietern fehlen).

    – jcuenod

    24. Juni 2015 um 11:22 Uhr

  • Ja, es funktioniert einwandfrei!! Das Problem lag wohl an der Datei summernote.min.js. Ich habe die vorherige Version davon verwendet. Als ich die Datei aus der Demo verwendet habe, wurde das Problem behoben!!

    – Revathy kr

    24. Juni 2015 um 11:57 Uhr

  • FOLLOWUP: ok fast … erster Absatz (bei jeder Textfolge, die ich versuche) bekommt a <span> Schild. Danach ist alles normal. @jcuenod

    – nclsvh

    1. April 2016 um 9:58 Uhr

  • Wenn Sie Version 6.0 bis 6.4 verwenden, benötigen Sie onpaste Anstatt von onPaste. Version 6.5 behebt dies.

    – Ross Lotte

    1. März 2017 um 16:23 Uhr

Benutzer-Avatar
Mathieu Castets

Nach v0.7.0 sollten alle Rückrufe durch das Rückrufobjekt umschlossen werden.
http://summernote.org/deep-dive/#callbacks

Wenn Sie also Summernote ab v0.7.0 verwenden, könnte die Antwort von jcuenod jetzt wie folgt umgeschrieben werden:

$('.summernote').summernote({
    callbacks: {
        onPaste: function (e) {
            var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');

            e.preventDefault();

            // Firefox fix
            setTimeout(function () {
                document.execCommand('insertText', false, bufferText);
            }, 10);
        }
    }
});

  • Stand heute getestet, funktioniert auf Firefox und Safari. Funktioniert auch auf Chrome, aber chrome e.preventDefault() funktioniert nicht, es fügt den Inhalt trotzdem ein, wenn der Inhalt ein Bild ist, selbst wenn bufferText.length == 0 ist.

    – Jemand Besonderes

    3. Juli 2016 um 8:25 Uhr

Der onPaste-Callback funktioniert super, aber ich hatte Probleme mit der unterschiedlichen Behandlung von Zeilenumbrüchen in verschiedenen Browsern. Also habe ich mir die folgende Lösung ausgedacht, die HTML-Zeilenumbrüche verwendet:



    $(".htmleditor").summernote({
      callbacks: {
        // callback for pasting text only (no formatting)
        onPaste: function (e) {
          var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
          e.preventDefault();
          bufferText = bufferText.replace(/\r?\n/g, '<br>');
          document.execCommand('insertHtml', false, bufferText);
        }
      }
    });

Hat es geschafft, einen schrecklichen Hack für IE11 zum Laufen zu bringen. Dies wird leider auch nach einer Einfügeerlaubnis des Benutzers fragen. Wenn jemand einen besseren Vorschlag findet, bin ich ganz Ohr.

var trap = false;
$(document).ready(function () {
    $('#summernote').summernote({
        callbacks: {
            onPaste: function (e) {
                if (document.queryCommandSupported("insertText")) {
                    var text = $(e.currentTarget).html();
                    var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');

                    setTimeout(function () {
                        document.execCommand('insertText', false, bufferText);
                    }, 10);
                    e.preventDefault();
                } else { //IE
                    var text = window.clipboardData.getData("text")
                    if (trap) {
                        trap = false;
                    } else {
                        trap = true;
                        setTimeout(function () {
                            document.execCommand('paste', false, text);
                        }, 10);
                        e.preventDefault();
                    }
                }

            }
        }
    })
})

JSFiddle

In meinem Fall haben alle oben genannten Lösungen nicht funktioniert. Mit diesen habe ich eine Lösung gefunden, die für mich funktioniert.

 $('#title').on('summernote.paste', function(e, ne) {
      var bufferText = ((ne.originalEvent || ne).clipboardData || window.clipboardData).getData('Text');
      ne.preventDefault();
      bufferText = bufferText.replace(/\r?\n/g, '<br>');
      document.execCommand('insertHtml', false, bufferText);
  })

Benutzer-Avatar
Reza Rouf

Strg+Umschalt+V ist die einfachste Lösung 😀

1245780cookie-checkFügen Sie den Inhalt als einfachen Text in den Summernote-Editor ein

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

Privacy policy