質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

6回答

5012閲覧

<pre>内のコードをclipboard.jsを使い全てコピーしたい

2001Y

総合スコア83

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/11/22 18:32

####目標

<pre>にて表示したコードをclipboard.jsを使い、<pre>全体をクリックすることでコピーするようにする。 ![イメージ画像](a4b8a7611547fa2e8c5b4a751b20a920.png) ####使用してみた大まかなHTML構成 <pre>自体にdata-clipboard-targetでidをつけた場合 ```HTML <pre class="html hljs xml" data-clipboard-target=".hljs"> テスト </pre>
<pre>自体にdata-clipboard-targetでclassをつけた場合 ```HTML <pre class="html hljs xml" id="hljs" data-clipboard-target="#hljs"> テスト </pre>

####使用してみたJavaScript
.hljsで実装した場合

JavaScript

1// 起動 2var cp = new Clipboard( ".hljs" ) ;

preで実装した場合

JavaScript

1// 起動 2var cp = new Clipboard( "pre" ) ;

固定JavaScript

JavaScript

1// 読み込み 2<script src='https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.13/clipboard.min.js'/> 3// 成功時アラート 4cp.on( &quot;success&quot;, function(e) { 5 alert( &quot;コードのコピーに成功しました!!&quot; ) ; 6} ) ; 7// 失敗時アラート 8cp.on( &quot;error&quot;, function(e) { 9 alert( &quot;コードのコピーに失敗しました&#8230;&quot; ) ; 10} ) ;

####要望

  • HTMLをいじりたくない

解決方法がわかる方は教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title></title> 6<script type="text/javascript" src="jquery-2.1.4.js"></script> 7</head> 8<body> 9 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.13/clipboard.min.js"></script> 10 <script type="text/javascript"> 11 $(function ($) { 12 var clipboard = new Clipboard('#hljs'); 13 14 // 成功時アラート 15 clipboard.on('success', function(e) { 16 alert('コードのコピーに成功しました!!'); 17 }); 18 19 // 失敗時アラート 20 clipboard.on('error', function(e) { 21 alert('コードのコピーに失敗しました!!'); 22 }); 23 }); 24 </script> 25<pre class="html hljs xml" id="hljs" data-clipboard-target="#hljs"> 26 テスト 27</pre> 28</body> 29</html>

clipboard.jsを読み込むのはヘッダーでなければいけないのでしょうか。

ボディーでもできますが。
それとも、「JS内でclipboard.jsを読み込む」という意味ですか?
それも、少し工夫すればできます。

投稿2016/11/23 01:29

naomi3

総合スコア1105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2001Y

2016/11/23 01:31

あぁ、<pre>よりも前にclipboard.jsを読み込み、起動、しなければならないということですね?
naomi3

2016/11/23 01:39

JSの読み込み、実行はむしろ後の方が良いのです。DOM要素すなわちHTMLの読み込み、解析が終わってからの方がJSには都合が良いです。
2001Y

2016/11/23 02:15

なるほど、ありがとうございます。
guest

0

ベストアンサー

Clipboardの第一引数にDOMエレメントを渡せばできるみたいですよ

javascript

1var cp = new Clipboard($('.hljs')[0]);

動くサンプル

html

1<html> 2<head> 3<meta charset="UTF-8" /> 4<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 5<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.3/clipboard.min.js"></script> 6<script> 7$(function() { 8var cp = new Clipboard($('.hljs')[0]); 9 cp.on('success', function(e) { 10 alert('success'); 11 }); 12}); 13</script> 14</head> 15 16<body> 17<pre class="html hljs xml" id="hljs" data-clipboard-target="#hljs"> 18 テスト 19</pre> 20</body> 21</html>

(追記)

JSFiddle上にも動くサンプルを作ってみました。

投稿2016/11/23 00:59

編集2016/11/23 02:34
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2001Y

2016/11/23 01:13

返信ありがとうございます。 それでもできないのですが、clipboard.jsを読み込むのはヘッダーでなければいけないのでしょうか。
popobot

2016/11/23 01:57

ヘッダーでなくてもできると思いますよ... うまくいかないコードを掲載していただければコメントできるかもしれません。
2001Y

2016/11/23 02:14

わかりましたありがとうございます。
guest

0

誰をベストアンサーにすればいいのか迷いましたが、無事解決できて本当に感謝です。
一様コードは載せておきます。
JSFiddle

投稿2016/11/23 14:56

2001Y

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HTML

1<pre class="css"> 2body { 3 font-family: 'Rounded-M+', 'Hiragino Kaku Gothic ProN', Helvetica, Arial, sans-serif; 4 color: #333333; 5 word-wrap: break-word; 6} 7</pre>

▲自分で入力するコードです。

JavaScript

1$('pre').attr("id", "hljs"); 2$('pre').attr("data-clipboard-target", "#hljs"); 3 4$(document).ready(function() { 5 $('pre').each(function(i, block) { 6 hljs.highlightBlock(block); 7 }); 8}); 9 10$(function() { 11 var cp = new Clipboard($('.hljs')[0]); 12 cp.on('success', function(e) { 13 alert('success'); 14 }); 15});

▲idやらclassやらはJavaScriptで追加しています。

これでもできないのですがどうすれば良いのでしょうか。

icchii様を見てJSFiddleにつくってみました。

(追記)URL変更
https://jsfiddle.net/2001Y/reamhmtb/6/

投稿2016/11/23 14:18

編集2016/11/24 10:00
2001Y

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/11/23 14:43

ご自分で貼ったリンクを再確認してください。貼り間違いでもしたのでは?
2001Y

2016/11/23 14:52

あ。。。申し訳ないです。。。何をしているんだか。。
kei344

2016/11/23 14:55

コメントで提示したURLで、動いてそうなのですが、求める挙動と違いますか?
2001Y

2016/11/23 14:57

いえその通りです。ありがとうございました!!
guest

0

simocheeさんのコードと併せて考えていただけるのであれば

javascript

1element.addEventListener("mousedown" , MouseDownFunc); 2```で、elementがクリックされたときに反応します。 3タップの場合は 4```javascript 5element.addEventListener("touchstart", touchHandler); 6```ですね。

投稿2016/11/23 04:25

Diawel

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2001Y

2016/11/23 14:12

ありがとうごいます。
guest

0

別にボタンがあり、それを押したらコピーするというようにするのなら、以下のようにして実装できます。

html

1<button id="copy" data-clipboard-text="">Copy</button> 2 3<pre id="code"> 4 <body> 5 <!-- ... --> 6 <body> 7</pre>

javascript

1const $code = document.getElementById('code'); 2const $btn = document.getElementById('copy'); 3 4document.addEventListener('DOMContentLoaded', (e) => { 5 const code = $code.innerHTML; 6 $btn.setAttribute('data-clipboard-text', code); 7});

投稿2016/11/23 01:06

simochee

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2001Y

2016/11/23 01:25

ありがとうございます。 最初はボタンで実装しようと思ってたんですが、全体をクリックするのでスマートでいいなと思ったので。 変えたんですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問