こちらでは、jQuery(JavaScript)を用いてテキストをクリップボードへコピーする方法について紹介しています。
テキストボックスとテキストエリアの値のテキストをコピーするのと、それ以外の要素のテキストをコピーするのでは少し方法が違うので、それぞれの方法について解説します。
テキストボックスやテキストエリアをコピーする方法
テキストボックスやテキストエリアの値をコピーするには、.select()
メソッドで選択し、JavaScriptのdocument.execCommand('copy')
を実行するするだけでクリップボードにコピーできます。
テキストボックスのサンプル
テキストボックスの値をクリップボードにコピーするサンプルです。
上の「コピー」というボタンを押すと、テキストボックス内のテキストデータがクリップボードにコピーされます。
HTMLとjQuery(JavaScript)のコードは以下のようになっています。
<input id="textbox1" type="text" " value="テストのテキスト。">
<button id="button1">コピー</button>
<span id="message1" class="red"></span>
HTMLではテキストを選択するためにテキストボックスを1つ、コピーを実行するためのボタンを1つ、コピーしたというメッセージを表示するためのspan
を1つ配置しています。
$('#button1').click(function(){
$('#textbox1').select();
document.execCommand('copy');
$('#message1').text('コピーしました。').show().fadeOut(1000);
});
jQueryではボタンが押されたときに、テキストボックスを選択し、コピーを実行します。その後でコピーされたことがわかるように、メッセージを表示してフェードアウトさせています。
テキストエリアのサンプル
テキストエリアの値をクリップボードにコピーするサンプルです。
上の「コピー」というボタンを押すと、テキストボックス内のテキストデータがクリップボードにコピーされます。
HTMLとjQuery(JavaScript)のコードは以下のようになっています。
<textarea id="textarea2">テストデータ1。
テストデータ2。
テストデータ3。</textarea>
<button id="button2">コピー</button>
<span id="message2" class="red"></span>
HTMLではテキストを選択するためにテキストエリアを1つ、コピーを実行するためのボタンを1つ、コピーしたというメッセージを表示するためのspan
を1つ配置しています。
$('#button2').click(function(){
$('#textarea2').select();
document.execCommand('copy');
$('#message2').text('コピーしました。').show().fadeOut(1000);
});
jQueryではボタンが押されたときに、テキストエリアを選択し、コピーを実行します。
その他の要素をコピーする方法
テキストボックスやテキストエリア以外の要素をコピーする方法を紹介します。
テキストボックスやテキストエリアの場合は、.select()
メソッドを使ってテキストを選択できました。
しかしそれ以外の要素の場合は、.selectAllChildren()
を使います。他にも方法はありますが、.selectAllChildren()
を使うのが簡単だと思います。
その他の要素のサンプル
<html>
<body>
hello!
</body>
</html>
コードをコピーするサンプルです。
<pre><code>
タグで囲まれている内側の部分をコピーします。
上の「コピー」というボタンを押すと、コードが選択されクリップボードにコピーされます。
HTMLとjQuery(JavaScript)のコードは以下のようになっています。
<pre id="text3"><code><html>
<body>
hello!
</body>
</html></code></pre>
<button id="button3">コピー</button>
<span id="message3" class="red"></span>
<pre><code>
の内側にあるコード<html>~</html>
の部分をコピーするのが目的です。
内側を選択するために<pre>
タグにid
を設定しています。
$('#button3').click(function(){
var elem = $('#text3').get(0);
window.getSelection().selectAllChildren(elem);
document.execCommand('copy');
$('#message3').text('コピーしました。').fadeIn(200).fadeOut(1000);
});
ボタンが押されたときに、<pre><code>
の内側にあるコードを選択するために、window.getSelection().selectAllChildren(elem)
としています。
.selectAllChildren()
の引数は、jQueryオブジェクトではなくNode(DOM要素)です。そのため、$('#text3').get(0)
とし、jQueryオブジェクトをNodeに変換しています。
その他の要素のサンプル2
もう1つ簡単な方法として、仮想的なテキストエリアを作って.select()
で選択する方法があります。
先ほどと同じHTMLに対して、以下のようなjQueryを実行します。
$('#button3').click(function() {
var dummy_area = $('<textarea>' + $('#text3').text() +'</textarea>');
dummy_area.appendTo(this);
dummy_area.select();
document.execCommand('copy');
dummy_area.remove();
});
2~3行目でダミーのテキストエリアを作成し、4行目で値を選択しています。
5行目でコピーしたら、6行目でダミーのテキストエリアを削除しています。
削除しないとダミーのテキストエリアが表示されてしまうので削除しておきましょう。