es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir una lista ordenada y una lista desordenada en texto legible con marcadores/números al pegar en el elemento de área de texto de HTML.

Estoy tratando de encontrar una solución para convertir listas ordenadas y desordenadas de una página web, las cuales, al copiarlas y pegarlas en un textarea, deben convertirse en una lista legible.

Por favor, revisa el siguiente fiddle para una mejor explicación:

https://jsfiddle.net/bodmwghj/2/

<textarea id="final"></textarea>

Si copiamos y pegamos una lista desde una página web a nuestro campo de texto, se pierden las “viñetas” / “números”.

En cambio, si pudieramos anteponer los elementos de la lista con al menos un símbolo de viñeta • y un espacio, tendría más sentido y el texto se mantendría legible sin necesidad de permitir HTML o usar editores como tinyMCE.

Siento que esto sería más complicado, pero si pudiéramos agregar números incrementales a la lista ordenada, sería genial, aunque también estaría bien si tuviéramos que usar viñetas si no se pueden generar números automáticamente.

Hasta ahora solo he encontrado el evento addEventListener para “pegar”, pero estoy confundido sobre cómo llegar a la solución deseada.

Por favor, avísame si puedo explicar algo más. Espero encontrar una solución para esto. Cualquier ayuda o posibles indicaciones hacia soluciones es apreciada.

EDIT: El texto copiado puede incluir HTML formateado y otro texto. El requerimiento es únicamente convertir las listas. Se ha actualizado la URL de JS Fiddle.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Convertir Listas Copiadas y Pegadas en un Formato Legible en un Textarea

    Para convertir listas ordenadas y desordenadas copiadas de una página web en un formato legible en un textarea, se pueden seguir los siguientes pasos:

    1. Crear un elemento textarea con un id de “final” donde se mostrará la lista convertida.
      <textarea id="final"></textarea>
      
    2. Agregar un escuchador de eventos “onpaste” al textarea que activará una función para convertir la lista cuando se pegue en el textarea.
      var final = document.getElementById("final");
      
      final.addEventListener("paste", convertirLista);
      
    3. En la función “convertirLista”, utilizar el método “getData” del objeto “ClipboardEvent” para obtener el texto copiado del portapapeles.
      function convertirLista(evento) {
       var clipboardData = evento.clipboardData || window.clipboardData;
       var textoPegado = clipboardData.getData("text/plain");
      }
      
    4. Utilizar expresiones regulares para encontrar y modificar los elementos de la lista en el texto copiado. Para listas desordenadas, agregar un símbolo de viñeta y un espacio a cada elemento. Para listas ordenadas, agregar números incrementales y un punto a cada elemento.
      // Para listas desordenadas
      textoPegado = textoPegado.replace(/^(?=.*\n)(?=\s*)([\-+*])?\s*(.*)/gm, "• $2");
      
      // Para listas ordenadas
      var i = 1;
      textoPegado = textoPegado.replace(/^(?=.*\n)(?=\s*)(\d+\.)?\s*(.*)/gm, function(cadena, p1, p2) {
         var resultado = p1 ? i + "." : "•";
         i++;
         return resultado + " " + p2;
      });
      
    5. Establecer el texto modificado como el valor del textarea.
      final.value = textoPegado;
      

    Cabe destacar que esta solución no requiere permitir HTML ni utilizar un editor de texto enriquecido como TinyMCE. Sin embargo, solo convierte las listas y no cualquier otro texto formateado en el contenido copiado.

Comments are closed.