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:
- 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.
- Ná»i (Append) pháș§n tá» <textarea> vĂ o HTML document hiá»n táșĄi.
- Sá» dỄng HTMLInputElement.select() Äá» chá»n (select) ná»i dung cá»§a pháș§n tá» <textarea>.
- Sá» dỄng Document.execCommand('copy') Äá» sao chĂ©p ná»i dung cá»§a <textarea> vĂ o khay nhá» táșĄm.
- 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Ă©:
- Äáș§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.
- 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.
- 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.
- 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Ăł.
- 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.
- 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);
}