実現したいこと
指定範囲のテキストをコピーするボタンを作っているのですが、正常に動作しません。
・コピーボタンとテキストのセットは同ページ内に複数設置予定
・コピーボタンはタイトルcontentsPanel__unit__title
内に設置
・コピーしたい対象テキストはcontentsPanel__unit__item
内is-copyText
部分
$(this).parents('.contentsPanel__unit__title').next('.contentsPanel__unit__item').find('.is-copyText');
の記述部分次第だと考えているのですが、あれこれ試してもダメでした。
該当のソースコード
html
1<div class="contentsPanel__unit"> 2 <div class="contentsPanel__unit__title contentsPanel__unit__title--all modFlexBox"> 3 テキストエリア 4 <div class="modBtn"> 5 <button type="button" class="modBtn__item modBtn__item--secondary modBtn__item--xs is-copyBtn">コピー</button> 6 </div> 7 </div> 8 <div class="contentsPanel__unit__item"> 9 <textarea id="testCopy" class="modForm modForm--textarea is-copyText" placeholder="test test test" readonly></textarea> 10 </div> 11</div>
JS
1$(function(){ 2 window.addEventListener('load', function(){ 3 $('.is-copyBtn').on('click',function(){ 4 var textElem = $(this).parents('.contentsPanel__unit__title').next('.contentsPanel__unit__item').find('.is-copyText'); 5 window.getSelection().selectAllChildren(textElem[0]); 6 document.execCommand("copy"); 7 }); 8 }); 9});
試したこと
以下にすると正常にコピーされるのですが、
都度都度IDを追加していくのは不便なためできれば上記の様な指示で動作を実現したいです。
<div class="contentsPanel__unit"> <div class="contentsPanel__unit__title contentsPanel__unit__title--all modFlexBox"> テキストエリア <div class="modBtn"> <button type="button" onclick="copy()" class="modBtn__item modBtn__item--secondary modBtn__item--xs is-copyBtn">コピー</button> </div> </div> <div class="contentsPanel__unit__item"> <textarea id="testCopy" class="modForm modForm--textarea is-copyText" placeholder="tbsUQRZjaHf9p4iHHet3" readonly></textarea> </div> </div> $(function(){ function copy() { let text = document.getElementById('testCopy'); text.select(); document.execCommand('copy'); } });
###追記
<div class="contentsPanel"> <div class="contentsPanel__unit modFlexBox"> <div class="contentsPanel__unit__title">タイトル</div> <div class="contentsPanel__unit__item">XXX</div> </div> <div class="contentsPanel__unit"> <div class="contentsPanel__unit__title contentsPanel__unit__title--all modFlexBox"> テキストエリア <div class="modBtn"> <button type="button" class="modBtn__item modBtn__item--secondary modBtn__item--xs is-copyBtn">コピー</button> </div> </div> <div class="contentsPanel__unit__item"> <textarea id="testCopy" class="modForm modForm--textarea is-copyText" placeholder="test test test" readonly></textarea> </div> </div> <div class="contentsPanel__unit modFlexBox"> <div class="contentsPanel__unit__title">タイトル</div> <div class="contentsPanel__unit__item">XXX</div> </div> <div class="contentsPanel__unit modFlexBox"> <div class="contentsPanel__unit__title">タイトル</div> <div class="contentsPanel__unit__item">XXX</div> </div> <div class="contentsPanel__unit"> <div class="contentsPanel__unit__title contentsPanel__unit__title--all modFlexBox"> テキストエリア <div class="modBtn"> <button type="button" class="modBtn__item modBtn__item--secondary modBtn__item--xs is-copyBtn">コピー</button> </div> </div> <div class="contentsPanel__unit__item"> <textarea id="testCopy" class="modForm modForm--textarea is-copyText" placeholder="test test test" readonly></textarea> </div> </div> <div class="contentsPanel__unit"> <div class="contentsPanel__unit__title contentsPanel__unit__title--all modFlexBox"> テキストエリア <div class="modBtn"> <button type="button" class="modBtn__item modBtn__item--secondary modBtn__item--xs is-copyBtn">コピー</button> </div> </div> <div class="contentsPanel__unit__item"> <textarea id="testCopy" class="modForm modForm--textarea is-copyText" placeholder="test test test" readonly></textarea> </div> </div> </div>
回答1件
あなたの回答
tips
プレビュー