Copy to Clipboard trong Javascript

Copy to Clipboard trong Javascript


LĂ m cĂĄch nĂ o để sao chĂ©p văn báșŁn vĂ o khay nhớ táșĄm báș±ng JavaScript?


Một nhu cáș§u ráș„t phổ biáșżn khi xĂąy dá»±ng trang web lĂ  kháșŁ năng sao chĂ©p văn báșŁn vĂ o khay nhớ táșĄm báș±ng một láș§n nháș„p vĂ o nĂșt. Javascript cĂł thể dễ dĂ ng thá»±c hiện điều nĂ y trong 5 bước:
  1. TáșĄo một pháș§n tá»­ <textarea> Ä‘ể nối nĂł vĂ o document. Đáș·t giĂĄ trị cá»§a nĂł thĂ nh chuỗi mĂ  chĂșng ta muốn sao chĂ©p vĂ o khay nhớ táșĄm.
  2. Nối (Append) pháș§n tá»­ <textarea> vĂ o HTML document hiện táșĄi.
  3. Sá»­ dỄng HTMLInputElement.select() để chọn (select) nội dung cá»§a pháș§n tá»­ <textarea>.
  4. Sá»­ dỄng Document.execCommand('copy') để sao chĂ©p nội dung cá»§a <textarea> vĂ o khay nhớ táșĄm.
  5. XĂła pháș§n tá»­ <textarea> ra khỏi document.
{tocify} $title={Table of Contents}

Snippet Code for Angular

Code HTML

  <div class="col-12 position-relative mt-3">
    <button class="btn btn-sm btn-outline-primary copy-to-clipboard copy-for-blogger" title="Copy to clipboard"
      (click)="copyToClipboard(highlightedCode)">Copy for Blogger</button>
    <button class="btn btn-sm btn-outline-primary copy-to-clipboard" title="Copy to clipboard"
      (click)="copyTextToClipboard(highlightedCode)">Copy Text</button>
    <pre #highlightedCode><code>Text for test</code></pre>
  </div>

Code Javascript/Typescript

  • Copy element với style css (copy cáșŁ format đang view) cá»§a nĂł cho cĂĄc bĂ i post trĂȘn blogger
  copyToClipboard(el: any) {
    const range = document.createRange();
    range.selectNodeContents(el);
    const sel = window.getSelection();
    sel && sel.removeAllRanges();
    sel && sel.addRange(range);
    document.execCommand('copy');
  }
  • Chỉ copy text từ báș„t cứ element nĂ o
    BáșĄn cĂł thể khĂŽng cáș§n truyền element vĂ o, để láș„y nội dỄng cá»§a 1 element báșĄn lĂ m như sau:
    const str = document.getElementById('item-to-copy').innerText;
  // Copy text from any element
  copyTextToClipboard(htmlEl: any) {
    const el = document.createElement('textarea');
    el.value = htmlEl.innerText;
    el.setAttribute('readonly', '');
    el.style.position = 'absolute';
    el.style.left = '-9999px';
    document.body.appendChild(el);
    el.select();
    document.execCommand('copy');
    document.body.removeChild(el);
  }
  • Copy text báș„t kỳ vĂ o clipboard - Code version 1
  // Copy any text
  copyTextToClipboard(text: string) {
    let selBox = document.createElement('textarea');
    selBox.style.position = 'fixed';
    selBox.style.left = '0';
    selBox.style.top = '0';
    selBox.style.opacity = '0';
    selBox.value = text;
    document.body.appendChild(selBox);
    selBox.focus();
    selBox.select();
    document.execCommand('copy');
    document.body.removeChild(selBox);
  }
  • Copy text báș„t kỳ vĂ o clipboard - Code version 2
  // Copy any text
  copyTextToClipboard(text: string) {
    const el = document.createElement('textarea');
    el.value = text;
    el.setAttribute('readonly', '');
    el.style.position = 'absolute';
    el.style.left = '-9999px';
    document.body.appendChild(el);
    el.select();
    document.execCommand('copy');
    document.body.removeChild(el);
  }
MĂŹnh sáșœ giáșŁi thĂ­ch cĂĄch code ở trĂȘn hoáșĄt động nhĂ©:
  1. Đáș§u tiền chĂșng ta sáșœ táșĄo ra một pháș§n tá»­ textarea mới - trường hợp nĂ y sá»­ dỄng khi báșĄn muốn copy nội dỄng cá»§a một pháș§n tá»­ khĂŽng pháșŁi lĂ  textarea hoáș·c input. Náșżu báșĄn copy nội dung cá»§a tháș» input hoáș·c textarea thĂŹ dĂčng cĂĄch phĂ­a dưới nhĂ©. - MỄc đích cá»§a việc táșĄo pháș§n tá»­ textarea ở đñy lĂ  để cĂł thể gọi Ä‘Æ°á»Łc hĂ m select() để chọn nội dung cá»§a pháș§n tá»­ vĂŹ chĂșng ta chỉ cĂł thể gọi hĂ m select() trĂȘn pháș§n tá»­ textarea vĂ  input.
  2. Tiáșżp theo đó, chĂșng ta gĂĄn value cá»§a textarea mới táșĄo báș±ng nội dung text mĂ  báșĄn muốn copy.
  3. GĂĄn một số thuộc tĂ­nh như readonly vĂ  position absolute với vĂ­ trĂ­ left lĂ  -9999px để lĂ m cho pháș§n tá»­ textarea mới táșĄo nĂ y khĂŽng hiện thị với người dĂčng.
  4. Sau đó, chĂșng ta sáșœ append pháș§n tá»­ textarea nĂ y vĂ o DOM để chĂșng ta cĂł thể gọi hĂ m select() trĂȘn nĂł.
  5. Sau khi gọi hĂ m select() trĂȘn pháș§n tá»­ textarea, chĂșng ta sáșœ gọi document.execCommand('copy') để copy nội dỄng đã chọn vĂ o clipboard.
  6. Cuối cĂčng, chĂșng ta xĂła textarea ra khỏi DOM báș±ng removeChild(el).
  • Copy text từ Textbox element
  // Copy text from Textbox element
  copyTextToClipboard(inputElement: any) {
    inputElement.select();
    document.execCommand('copy');
    inputElement.setSelectionRange(0, 0);
  }

Reference

Đăng nháș­n xĂ©t

Mới hÆĄn CĆ© hÆĄn