clipboard.js を使用して WEBページ上でテキストをクリップボードにコピーする

clipboard.js
CDNJS

デモページ

ページ下部は、div に contenteditable="true" を設定しているので直接編集できるエリアになっています。なので、クリップボードにコピーした後は普通に貼り付けて確認できます。

実装内容

1) ページにひとつだけ、クリップボード転送用の要素を DIV で作成します(ここでは id="clipboard")
   (body 要素直下でいいと思います)

2) DIV 内に改行やスペースを反映させる為に white-space:pre-wrap を設定する
( 3) で幅を指定してそこで改行させる為の -wrap を使用します )

3) ページ上から隠す為に、position:absolute;left:-1000px を設定する
   (クリップボートへコピーする為に選択する必要があるので、非表示では動作しません)
   転送したテキストがこちら側へ表示しないように width:900px と word-wrap:break-word を指定する

4) クリックイベントは、ボタンである必要は無く、どのような要素でも良い

5) ここでは、クリップボードへコピーが終了した後、alert でメッセージを表示しています
( 必要な場合にこのようにイベントを使用します )

注意事項

ここでは、WEB ページ内に無い文字列を加工等してクリップボードに転送する事を想定しているので、転送用の隠し DIV を用意していますが、WEB ページ上に既にあるテキストならば、その要素に対して直接 data-clipboard-target 属性をトリガー要素に設定します


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<title>クリップボードへコピー</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css" />

<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>

<script>
$(function(){

	// ***************************
	// クリップボード
	// ***************************
	// コピーする時のトリガーとなる要素に設定されるクラスを決定
	var clipboard = new ClipboardJS('.clip_trigger');

	// ***************************
	// コピー成功後のイベント
	// ***************************
	clipboard.on('success', function(e) {
		alert("クリップボードにコピーしました");
	});

	// ***************************
	// クリップボード用データ転送
	// ***************************
	$("#act_copy").on("click", function(){

		$("#clipboard").text( $("#text_data").val() );

	});

});

</script>

<style>
html,body {
	height: 100%;
}

body {
	margin: 0;
}

#text_data {
	width:300px;
}

/* 上下エリア フィットコントロール用  */
#head {
	padding: 16px;
	width: 100%;
	height: 230px;
}
#extend {
	padding: 4px 16px;
	border: solid 2px #c0c0c0;
	overflow: scroll;

	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );

	height: calc( 100% - 230px - 2px );
}

</style>

</head>
<body>
<!-- クリップボード用隠しエリア -->
<div id="clipboard" style='position:absolute;left:-1000px;width:900px;white-space:pre-wrap;word-wrap:break-word;'></div>
<div id="head">
	<div class="alert alert-primary">クリップボード処理
	<a class="btn btn-secondary btn-sm float-right align-top" href=".">フォルダ</a>
</div>

	<span class="align-top mr-4">クリップボードへコピー</span>

	<textarea class="align-top mr-4" id="text_data"></textarea>

	<input
		id="act_copy"
		data-clipboard-target="#clipboard"
		class="clip_trigger btn btn-primary align-top mr-4"
		type="button"
		value="実行">

	<input
		onclick="location.reload(true)"
		class="btn btn-info btn-sm align-top  mr-4"
		type="button"
		value="再表示">


</div>

<!-- 編集可能なエリア : ここにクリップボードの内容を貼り付けて確認する -->
<div id="extend" contenteditable="true"></div>



</body>
</html>