Copiar texto al portapapeles

Este sencillo ejemplo te permite poner un botón o usar una pulsación de ratón sobre un bloque de una página web para copiar su contenido al portapapeles. Puedes copiar tanto texto como código HTML

Solución

<script>

function copiar(idTxt){

   let blq = document.getElementById(idTxt);

   let txt = blq.innerHTML;

   //si no se quiere incluir código html usar innerText

   let btn = event.target;

   let btnLbl = btn.innerText;

   navigator.clipboard.writeText(txt);

   btn.innerHTML = "Copiado";

   setTimeout(()=>btn.innerText = btnLbl, 1200);

}

</script>

Este pequeño código es para mostrar el funcinamiento del script.

<body>

<div id="texto">

<p>Este texto se puede copiar al clipboard usando el botón copiar<br>

Lo fundamental es leer el innerHTML del bloque de donde se copiará <br>

Y poner este texto en el clipboard usando el objeto clipboard del navegador.<br>

El evento se puede asociar en el HTML o con addEventListener, aquí lo pongo por comodidad con HTML.<br>

El resto muestra que se ha completado la acción con la etiqueta del botón

</p>

</div>

<button id="btnCopiar" onclick="copiar('texto')">Copiar</button>

<body>

Explicación

Este comportamiento se implementa mediante una función que lee el contenido del bloque que queramos copiar. Posteriormente usa este cntenido como argumento del método writeText del clipboard.

Si solo se quiere copiar el texto, sin las etiquetas HTML usamos innerText para extraer el contenido del bloque, pero si queremos copiar también est código usamos innerHTML  (línea 4)

En el ejemplo se implementa mediante un botón: al pulsar se copia el texto y se cambia su etiqueta de copiar a copiado, al cabo de 1200ms la etiqueta vuelve a cambiar

También puedes usar un click sobre el propio texto

En la ventana de demostración se copia el texto, luego puedes pegar en cualquier documento de texto para comprobar que ha funcionado