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?
Fügen Sie den Inhalt als einfachen Text in den Summernote-Editor ein
Revathy kr
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 vononPaste
. Version 6.5 behebt dies.– Ross Lotte
1. März 2017 um 16:23 Uhr
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();
}
}
}
}
})
})
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);
})
Reza Rouf
Strg+Umschalt+V ist die einfachste Lösung 😀