Javascript select() – Copy to Clipboard

select () Text für Clipboard selektieren

select () markiert oder selektiert den Text einer Textarea oder eines Input-Felds. Das sieht fast genauso aus wie die Methode focus(), aber select () wählt den Text »kopierfähig«.

document.execCommand('copy') kopiert einen mit select () markierten Text ins Clipboard, also in die Zwischenablage des Benutzers.

18-12-15 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG
HTML
<textarea id="chupa"></textarea>
<button data-select="chupa">Markieren</button>
Script – Inhalt mit select auswählen
const copybutton = document.querySelector("button[data-select]");
copybutton.addEventListener ("click", (e) => {
	const copytarget = e.target.dataset.select;
	const inp = (copytarget ? document.getElementById(copytarget) : null);
	if (inp && inp.select) {
		inp.select();
	}
});

Soweit gibt es keinen Unterschied zu focus(). Aber select zusammen mit document.execCommand('copy') legt den markierten Text direkt in die Zwischenablage des Benutzers.

Select(): Copy to Clipboard

Das war einst die Hauptaufgabe für die Methode select: den Text einer Textarea oder Input-Felds in das Clipboard – den Zwischenspeicher – zu kopieren. Die modernen Browser spielen da allerdings nicht mehr mit, sie lesen den Inhalt eines input- oder textarea-Feldes nicht ohne Weiteres und überschreiben nicht mir nichts dir nichts das Clipboard des Users.

Man stelle sich nur einmal vor, was ein Third-Party-Skript im Browser (z.B. ein AddOn) alles mit dem Inhalt eines Eingabefeldes anstellen könnte: z.B. Passwörter und andere sensible Daten auslesen.

Zwischenzeitlich waren execCommand() und cut, copy oder paste ein Weg, den Inhalt eines Eingabefeldes in die Zwischenablage zu kopieren. Diese Funktionen unterliegen aber Einschränkungen und sind zwischen unterschiedlichen Betriebssystemen und Browsern nicht konsistent (z.B.: IE11 öffnet zunächst ein modales Fenster und fragt, ob der Text tatsächlich kopiert werden darf).

execCommand() gilt heute als veraltet (deprecated), stattdessen haben wir das Clipboard-Api und writeText.


HTML
<div class="msg"></div>
<textarea id="website">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar, arcu quis </textarea>
<button data-copy="#website">copy</button>
Script: Inhalt in die Zwischenablage kopieren
const copybutton = document.querySelector("button[data-copy]");
copybutton.addEventListener('click', function(e) {
	const copytarget = e.target.dataset.copy;
	const inp = (copytarget ? document.querySelector(copytarget) : null);
	if (inp && inp.select) {
		inp.select();
		navigator.clipboard.writeText(inp.value).then(() => {
			document.querySelector(".msg").textContent = "Text in die Zwischenablage kopiert";
			
		},() => {
			console.error('Fehler beim Koperen');
		});
		inp.blur();
    }
});

Das Clipboard-Api wird nur auf Webseiten unterstützt, die mit HTTPS ausgeliefert werden.