あまり使用する機会もないとは思いますが、今回は「クリップボードへのコピーするボタン」の実装を書いていきます。
当サイトの「コードをクリップボードにコピー」も同じ関数で動いてます。
仕様
- コピーするボタンをクリックすると、「コピーできました」「コピーに失敗しました」と、アラートが出る。
- ページへの複数設置が可能。
javascriptのコード
コードをクリップボードにコピー
const copybtns = document.getElementsByClassName('copybtn'); // コピーするボタンのクラス名
const clipCopy = () =>{
if( copybtns.length > 0 ){
for(let i = 0; i < copybtns.length ; i++){
copybtns[i].addEventListener('click', ()=>{
const copytextarea = document.createElement("textarea");
const id = copybtns[i].getAttribute('data-copy');
const copyarea = document.getElementById(id);
const copytext = copyarea.textContent;
copytextarea.textContent = copytext;
document.body.appendChild(copytextarea);
copytextarea.select();
const results = document.execCommand('copy');
document.body.removeChild(copytextarea);
if( results ){
alert('クリップボードにコピーしました。');
}else{
alert("コピーに失敗しました。")
}
});
}
}
}
clipCopy();
どんな動作をしているか、少し説明していきます。
7行目ではtextareaタグを新しく生成しています。
この textareaタグの中に、コピーするテキスト一度ペーストしてから、textareaタグ内の中身を選択して、コピーするといった流れで、コピーしています。
8行目はクリックした copybtn 要素の data-copy属性値を取得しています。
使い方にも記述しますが、ここのdata-copy属性値はコピーしたい要素のid名を入れてください。
9行目はコピーしたい要素を取得しています。
12行目で7行目で生成したtextareaタグをbodyタグの一番最後に追加しています。
13,14行目でクリップボードにテキストをコピーしてから、
15行目で追加したtextareaタグを削除しています。
htmlのコード、使い方
コードをクリップボードにコピー
<span class="copybtn" data-copy="copyarea">クリップボードへコピー</span>
<div id="copyarea">
<!-- コピーされるエリア -->
</div>
以上が、htmlのコードです。
以下の2点を守ってくれれば、正常に動きます。
- クラス名「copybtn」要素には「data-copy」属性をつける。
- 「data-copy」属性の値は、コピーしたい要素のid名をつける。
コピーするボタンのクラス名を変えたい場合は、jsの1行目も合わせて変えて使ってください。