dark code bootstrap javascript html summernote

javascript - code - wysiwyg editor bootstrap 4



Pegue el contenido como texto plano en el editor de summernote (4)

Necesito copiar y pegar algo de contenido en mi editor de summernote. Pero cuando pegue, toma el estilo de la página desde donde lo copié. Necesito pegarlo como texto simple. ¿Hay alguna solución?


Después de v0.7.0, cada devolución de llamada debe ser envuelta por el objeto de devolución de llamada. (source)

Entonces, si está utilizando summernote de v0.7.0 o superior, la respuesta de jcuenod ahora podría reescribirse como:

$(''.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); } } });


Utilice la onPaste llamada onPaste

Use la opción onPaste para definir una devolución de llamada que eliminará las etiquetas e insertará manualmente el texto.

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

Crédito: https://github.com/summernote/summernote/issues/303

Resolver problemas de Firefox:

Es posible que aún tengas problemas con Firefox. Si es así, envuelva document.execCommand en una función de temporizador para retrasar un poco su ejecución:

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

Actualización para v0.7.0 +

La posición de las devoluciones de llamada en las opciones se cambia después de v0.7.0
Después de v0.7.0, cada devolución de llamada debe ser envuelta por el objeto de devolución de llamada. (source)

Esto significa que el código original debe escribirse como

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

Gracias a Mathieu Castets por señalar esto (así que si este bit le ayudó, ¡aumente su respuesta!)

TL; DR: Aquí hay una demo funcional


La devolución de llamada onPaste funciona muy bien, pero estaba teniendo problemas con el manejo diferente de los saltos de línea en diferentes navegadores. Así que se me ocurrió la siguiente solución, que utiliza html-linebreaks:

$(".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); } } });


Se las arregló para hacer un horrible trabajo de hack para IE11. Lamentablemente, esto también solicitará un permiso de pegado del usuario. Si alguien descubre una sugerencia mejor, soy todo oídos.

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