3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

clipboardにHTML, CSSをコピーするボタンを設置

Last updated at Posted at 2018-10-11

「ある範囲のHTML, CSSをクリップボードに一発でコピーできるボタンが欲しい」という件に難儀したのでメモに残す。

難儀した箇所

HTMLで囲われたテキストをコピーするにはclipboard.jsなどを使って実装できるが、HTMLやCSSのコピーは正面突破しようとするとできないので、工夫が必要だった。

どうしたか

clipboard.jsでは、value評価される部分をクリップボードにコピーする仕様になっているっぽかったので、HTML, CSSを取得した上でinput valueに一旦入れてあげvalue評価させた上で、input valueを取得するようにした。
input要素についてはstyle="display: none"で表示させないようにした。

example.html

<div id="clipboard">
  <input id="clipboard-text" type="text" value="" style="display: none" />
  <button class="btn copy-dom-to-clipboard-btn" data-clipboard-action="copy" data-clipboard-text="">Copy DOM</button>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $('.copy-dom-to-clipboard-btn').on('click', function() {
      // プレビュー画面のHTML, CSSの取得
      var copyTarget = document.querySelector("CSS指定").outerHTML + document.querySelector("div idなど").outerHTML;
      // HTML/CSSをコピーするにはDOM内でvalue評価しないといけないので対応する。
      var clipBoardVal = $('#clipboard-text').val(copyTarget);
      $('.copy-dom-to-clipboard-btn').attr('data-clipboard-text', clipBoardVal.val());
    });
    var clipboard = new Clipboard('.copy-dom-to-clipboard-btn');
    // コピーした時にアラートを表示する (成功時)
    clipboard.on( "success", function(e) {
      e.clearSelection();
      alert( "Copied on Clipboard" );
    });
  });
</script>

その他 clipboard.js については下記参照
clipboard.js

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?