対象の要素を選択状態にしてクリップボードへコピー

対象の要素を選択状態にしてクリップボードへコピーするには、次のような方法で可能です。

JavaScript

/**
 * 要素を選択してクリップボードへコピー
 * @param {Element} elem コピーする要素
 * @return {boolean} コピーに成功した場合はtrue、失敗した場合はfalseを返す
 */
var copyElementToClipboard = function(elem) {
	// 要素を選択
	selectElement(elem);

	// クリップボードへコピー
	var result = document.execCommand('copy');

	// 選択を解除
	document.getSelection().removeAllRanges();

	return result;
};

/**
 * 要素を選択
 * @param {Element} elem 選択する要素
 */
var selectElement = function(elem) {
	// 選択範囲を操作するRangeオブジェクトを用意する
	var range = document.createRange();

	// 選択範囲を設定する(引数に選択状態にする要素を指定)
	range.selectNode(elem);

	// ユーザーの選択状態を得る
	var selection = document.getSelection();

	// 現在の選択状態を解除する
	selection.removeAllRanges();

	// 対象要素を選択状態にする
	selection.addRange(range);
};

JavaScript

var sampleElem  = document.getElementById('sample'),
    copyBtnElem = document.getElementById('copy');

copyBtnElem.addEventListener('click', function() {
	var result = copyElementToClipboard(sampleElem);

	if (result) {
		alert('コピーに成功');
	} else {
		alert('コピーに失敗');
	}
});

簡単な解説

document.createRangeメソッドを使用して選択範囲を操作するためのオブジェクトを生成します。
document.createRangeで生成したオブジェクトにselectNodeメソッドという特定の要素を選択範囲とするメソッドで対象の要素を指定します。
document.getSelectionメソッドで現在の選択範囲を取得し、removeAllRangesメソッドで、現状の選択範囲を一度解除します。
document.createRangeで生成したオブジェクトをdocument.getSelectionメソッドのオブジェクトにaddRangeメソッドを使用して指定します。
あとは、document.execCommandメソッドで引数にcopyを指定することで、対象の要素の選択範囲をクリップボードへコピーすることができます。

JavaScript逆引きリファレンス一覧へ戻る