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

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

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

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

jQuery

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

Q&A

解決済

2回答

501閲覧

jQuery:コードをクリップボードへコピー

riii_n

総合スコア6

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/09/03 07:02

編集2019/09/03 07:26

HTML

1 <div class="box"> 2 <div class="code"> 3 <p>テキスト</p> 4 <p>テキスト</p> 5 </div> 6 <div class="btn"> 7 <p class="copy_btn">ボタン</p> 8 </div> 9 </div> 10 11 <div class="box"> 12 <div class="code"> 13 <p>ダミー</p> 14 <p>ダミー</p> 15 </div> 16 <div class="btn"> 17 <p class="copy_btn">ボタン</p> 18 </div> 19 </div> 20 21 22 <div class="alert_area"> 23 <p>コピーしました!</p> 24 </div>

jQuery

1 <script> 2 $(function() { 3 4 $('.alert_area').hide(); 5 $('.box').click(function() { 6 var clickbtn = $('<textarea></textarea>'); 7 clickbtn.html($(this).parent().find('.code').html()); 8 $(this).append(clickbtn); 9 clickbtn.select(); 10 document.execCommand('copy'); 11 clickbtn.remove(); 12 $('.alert_area').show(); 13 }); 14 15 }); 16 </script>
<p>タグ部分をボタンを押した時にクリップボードにコピーできるようにしたいです。 現在一つ目の「<p>テキスト</p>」の部分はコピーできるのですが、二つ目の#box内のボタンを押しても「<p>ダミー</p>」がコピーできません。

初心者ですのでコード付きで教えて頂けると助かります。

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

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

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

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

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

m.ts10806

2019/09/03 07:11

.alert_area のHTMLもご提示ください。
guest

回答2

0

this は .box を指しているので、.parent() ではその上(body?)になってしまいます。

JavaScript

1 //clickbtn.html($(this).parent().find('.code').html()); 2 clickbtn.html($('.code', this).html());

投稿2019/09/03 07:47

x_x

総合スコア13749

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

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

riii_n

2019/09/03 12:14

解決出来ました! 回答ありがとうございます!
guest

0

ベストアンサー

同ページに同じIDは設置できません。
JavaScript側もHTML上、1番目に出てくる要素にしかイベントが登録されないようになっていますね。
classにするだけでも解決しそうにないので、最も親であるboxのクリックではなくボタンクリックで拾われたほうが良いように思います。

html

1 <div id="box1" class="copy_area"> 2 <div id="code1" class="target_code"> 3 <p>テキスト</p> 4 </div> 5 <div class="btn"> 6 <p class="copy_btn">ボタン1</p> 7 </div> 8 </div> 9 10 <div id="box2" class="copy_area"> 11 <div id="code2" class="target_code"> 12 <p>ダミー</p> 13 </div> 14 <div class="btn"> 15 <p class="copy_btn">ボタン2</p> 16 </div> 17 </div> 18

js

1 $(function() { 2 $('.alert_area').hide(); 3 $('.copy_btn').on('click',function() { 4 var clickbtn = $('<textarea></textarea>'); 5 clickbtn.html($(this).parent().parent().children('.target_code').html()); 6 $(this).append(clickbtn); 7 clickbtn.select(); 8 document.execCommand('copy'); 9 console.log(clickbtn.html()); 10 clickbtn.remove(); 11 $('.alert_area').show(); 12 }); 13 });

投稿2019/09/03 07:18

編集2019/09/03 07:30
m.ts10806

総合スコア80850

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

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

riii_n

2019/09/03 07:27

classに変更しましたが同じ現象になりました・・・
m.ts10806

2019/09/03 07:31

追記しています。 重複IDがNGはあくまで正しく動かない前提のものなので、 そこから「このボタンとの関連」を追っていく必要があります。
m.ts10806

2019/09/03 07:35

ただ、これだと <p>ダミー</p> のようにタグまで一緒についてきますけど、それは要件通りですか?
riii_n

2019/09/03 12:13

大丈夫です! とても助かりました! ありがとうございます!
m.ts10806

2019/09/04 00:40

かなりざっと作ったので穴はあります。 ご自身でご調整ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問