対象の要素を選択状態にしてクリップボードへコピー
対象の要素を選択状態にしてクリップボードへコピーするには、次のような方法で可能です。
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
を指定することで、対象の要素の選択範囲をクリップボードへコピーすることができます。