number ejemplos editable content are and javascript contenteditable

ejemplos - table content editable javascript



Contenteditable permitiendo solo texto sin formato (2)

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de hacer un contenteditable que solo acepte texto plano.

Lo que quiero es escuchar el evento de pegar y luego eliminar todo el código HTML y pegarlo en el texto editable solo como texto sin formato.

Para hacerlo, ya he probado dos enfoques diferentes, respuestas basadas en preguntas similares, pero esos dos enfoques tienen problemas.

Primero: este no usa el escucha "pegar", en cambio, escucha la entrada (no es ideal para este caso), esta fue una solución para evitar el uso de la API del Portapapeles .

Problema: Esto funciona bien en Chrome pero no en Firefox e IE. Cuando copia y pega el html, elimina correctamente html y solo pega texto, pero al continuar escribiendo texto, el carácter siempre se lleva al principio de la edición de contenido.

function convertToPlaintext() { var textContent = this.textContent; this.textContent = textContent; } var contentEditableNodes = document.querySelectorAll(''.plaintext[contenteditable]''); [].forEach.call(contentEditableNodes, function(div) { div.addEventListener("input", convertToPlaintext, false); });

Puede probarlo aquí / código en el que me http://jsbin.com/moruseqeha/edit?html,css,js,output : http://jsbin.com/moruseqeha/edit?html,css,js,output

Segundo: como el primero falló y no escucha solo el evento "pegar", decidí intentarlo utilizando la API del Portapapeles . El problema aquí es que en IE document.execCommand ("insertHTML", false, text); no parece funcionar Esto funciona en chrome, firefox (probado en v41 y v42) y en edge.

document.querySelector(".plaintext[contenteditable]").addEventListener("paste", function(e) { e.preventDefault(); var text = ""; if (e.clipboardData && e.clipboardData.getData) { text = e.clipboardData.getData("text/plain"); } else if (window.clipboardData && window.clipboardData.getData) { text = window.clipboardData.getData("Text"); } document.execCommand("insertHTML", false, text); });

Puedes probarlo aquí: http://jsfiddle.net/marinagon/461uye5p/

¿Puede alguien ayudarme a encontrar una solución para algunos de estos problemas o alguien tiene una solución mejor que las que se presentan aquí?

Soy consciente de que podría usar textarea, pero tengo razones para no usarlo.

Actualización - Solución encontrada

Encontré una solución para el segundo enfoque. Desde document.execCommand ("insertHTML", falso, texto); no funciona en IE. He buscado otras soluciones y encontré esta https://stackoverflow.com/a/2925633/4631604 .

Aquí puede ver el segundo enfoque con una solución que funciona bien en todos los navegadores http://jsfiddle.net/marinagon/1v63t05q/


Hack sucio para limpiar los datos pegados.

function onpaste(e, el){ setTimeout(function(){ el.innerText = el.innerText; }, 10); }


Use un elemento textarea lugar de un elemento contentEditable: (énfasis mío)

El elemento textarea representa un control de edición de texto plano multilínea para el valor en bruto del elemento.

Ejemplo:

/* Auto resize height */ var textarea = document.querySelector(''textarea''); (textarea.oninput = function() { textarea.style.height = 0; textarea.style.height = textarea.scrollHeight + ''px''; })();

textarea { width: 100%; }

<textarea>Hello! You can edit my content. But only plain-text!!!</textarea>