Bagaimana cara menyalin teks di dalam div ke clipboard? Saya memiliki div dan perlu menambahkan tautan yang akan menambahkan teks ke clipboard. Apakah ada solusi untuk ini?
<p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
<a class="copy-text">copy Text</a>
Setelah saya klik salin teks, lalu saya tekan Ctrl+ V, itu harus ditempel.
Jawaban:
Edit per 2016
Pada 2016, Anda sekarang dapat menyalin teks ke clipboard di sebagian besar browser karena sebagian besar browser memiliki kemampuan untuk secara terprogram menyalin pilihan teks ke clipboard menggunakan
document.execCommand("copy")
yang bekerja di luar pilihan.Seperti beberapa tindakan lain di browser (seperti membuka jendela baru), salin ke clipboard hanya dapat dilakukan melalui tindakan pengguna tertentu (seperti klik mouse). Misalnya, itu tidak dapat dilakukan melalui timer.
Berikut contoh kode:
Berikut ini demo yang lebih canggih: https://jsfiddle.net/jfriend00/v9g1x0o6/
Dan, Anda juga bisa mendapatkan perpustakaan pra-dibangun yang melakukan ini untuk Anda dengan clipboard.js .
Tua, bagian historis dari jawaban
Menyalin secara langsung ke clipboard melalui JavaScript tidak diizinkan oleh peramban modern apa pun karena alasan keamanan. Solusi yang paling umum adalah menggunakan kemampuan Flash untuk menyalin ke clipboard yang hanya dapat dipicu oleh klik pengguna langsung.
Seperti yang sudah disebutkan, ZeroClipboard adalah seperangkat kode populer untuk mengelola objek Flash untuk melakukan penyalinan. Saya sudah menggunakannya. Jika Flash diinstal pada perangkat penelusuran (yang mengesampingkan ponsel atau tablet), Flash itu berfungsi.
Cara kerja paling umum berikutnya adalah menempatkan teks yang terikat clipboard ke dalam bidang input, memindahkan fokus ke bidang itu dan menyarankan pengguna untuk menekan Ctrl+ Cuntuk menyalin teks.
Diskusi lain tentang masalah ini dan kemungkinan penyelesaiannya dapat ditemukan di pos Stack Overflow sebelumnya:
Bagaimana cara menyalin ke clipboard di JavaScript?
Bagaimana cara menyalin teks ke clipboard klien menggunakan jQuery?
Bagaimana Anda bisa menyalin ke clipboard tanpa Flash?
Pertanyaan-pertanyaan ini meminta alternatif modern untuk menggunakan Flash telah menerima banyak upvotes pertanyaan dan tidak ada jawaban dengan solusi (mungkin karena tidak ada):
Alternatif HTML5 untuk ZeroClipboard berbasis flash untuk menyalin data dengan aman ke clipboard?
Salin ke clipboard tanpa Flash
Internet Explorer dan Firefox dulunya memiliki API non-standar untuk mengakses clipboard, tetapi versi mereka yang lebih modern telah mencela metode tersebut (mungkin karena alasan keamanan).
Ada upaya standar yang baru lahir untuk mencoba menemukan cara "aman" untuk menyelesaikan masalah papan klip yang paling umum (mungkin memerlukan tindakan pengguna tertentu seperti yang dibutuhkan oleh solusi Flash), dan sepertinya itu mungkin sebagian diimplementasikan dalam yang terbaru versi Firefox dan Chrome, tetapi saya belum mengonfirmasi hal itu.
sumber
document.execCommand("copy")
dalam keadaan yang cukup untuk mengandalkan menggunakannya untuk ini. Jadi, saya berusaha untuk menjaga jawaban saya tetap up to date (yang awalnya ditulis hampir 2 tahun yang lalu). Kami masih belum memiliki solusi yang dapat diandalkan untuk Safari selain memilih teks sebelumnya dan memberi tahu pengguna untuk menekan Ctrl + C secara manual, tetapi setidaknya kemajuan sedang dibuat di tempat lain.document.execCommand("copy")
sehingga kode ini sekarang dapat digunakan di Safari 10.Ada cara non-Flash lain (selain dari Clipboard API yang disebutkan dalam jawaban jfriend00 ). Anda perlu memilih teks dan kemudian menjalankan perintah
copy
untuk menyalin ke clipboard teks apa pun yang saat ini dipilih pada halaman.Misalnya, fungsi ini akan menyalin konten elemen yang diteruskan ke clipboard (diperbarui dengan saran di komentar dari PointZeroTwo ):
Begini Cara kerjanya:
document.execCommand("copy")
.Anda dapat melihat demo cepat di sini:
Masalah utamanya adalah tidak semua browser mendukung fitur ini saat ini, tetapi Anda dapat menggunakannya pada yang utama dari:
Pembaruan 1: Ini dapat dicapai juga dengan solusi JavaScript murni (tanpa jQuery):
Perhatikan bahwa kami melewatkan id tanpa # sekarang.
Sebagai madzohan dilaporkan dalam komentar di bawah, ada beberapa masalah aneh dengan versi 64-bit Google Chrome dalam beberapa kasus (menjalankan file secara lokal). Masalah ini tampaknya diperbaiki dengan solusi non-jQuery di atas.
Madzohan mencoba di Safari dan solusinya berhasil tetapi menggunakan
document.execCommand('SelectAll')
alih-alih menggunakan.select()
(sebagaimana ditentukan dalam obrolan dan di komentar di bawah).Seperti yang ditunjukkan PointZeroTwo dalam komentar , kode dapat ditingkatkan sehingga akan mengembalikan hasil keberhasilan / kegagalan. Anda dapat melihat demo di jsFiddle ini .
UPDATE: COPY MENJAGA FORMAT TEKS
Seperti yang ditunjukkan oleh pengguna dalam StackOverflow versi Spanyol , solusi yang tercantum di atas berfungsi dengan baik jika Anda ingin menyalin konten elemen secara harfiah, tetapi mereka tidak berfungsi dengan baik jika Anda ingin menempelkan teks yang disalin dengan format (seperti itu disalin ke dalam
input type="text"
, formatnya "hilang").Solusi untuk itu adalah menyalin ke suatu konten yang dapat diedit
div
dan kemudian menyalinnya denganexecCommand
cara yang serupa. Di sini ada contoh - klik pada tombol salin dan kemudian rekatkan ke kotak konten yang dapat diedit di bawah ini:Dan di jQuery, akan seperti ini:
sumber
aux.style.position = "fixed";
aux.style.top = 0;
atasappendChild
panggilan.clipboard.js adalah utilitas bagus yang memungkinkan menyalin teks atau data HTML ke clipboard tanpa menggunakan Flash. Ini sangat mudah digunakan; cukup sertakan .js dan gunakan sesuatu seperti ini:
clipboard.js juga ada di GitHub .
Edit pada Jan 15, 2016: The top jawaban itu diedit hari ini untuk referensi API yang sama dalam jawaban saya diposting pada bulan Agustus 2015. Teks sebelumnya menginstruksikan pengguna untuk menggunakan ZeroClipboard. Hanya ingin menjadi jelas bahwa saya tidak mencabut ini dari jawaban jfriend00, tetapi sebaliknya.
sumber
Kesederhanaan adalah kecanggihan tertinggi.
Jika Anda tidak ingin text-to-be-coppied menjadi terlihat:
jQuery:
HTML:
sumber
With Line Breaks (Perpanjangan Jawaban dari Alvaro Montoro)
sumber
Anda dapat menggunakan kode ini untuk menyalin nilai input di halaman di Clipboard dengan mengklik tombol
Ini Html
Kemudian untuk html ini, kita harus menggunakan Kode JQuery ini
Ini adalah solusi paling sederhana untuk pertanyaan ini
sumber
Pendekatan yang lebih baik tanpa flash atau persyaratan lainnya adalah clipboard.js . Yang perlu Anda lakukan adalah menambahkan
data-clipboard-target="#toCopyElement"
pada tombol apa pun, menginisialisasinew Clipboard('.btn');
dan itu akan menyalin konten DOM dengan idtoCopyElement
ke clipboard. Ini adalah cuplikan yang menyalin teks yang disediakan dalam pertanyaan Anda melalui tautan.Namun satu batasannya adalah tidak berfungsi di safari, tetapi ia bekerja di semua peramban lain termasuk peramban seluler karena tidak menggunakan flash
sumber
sumber
sumber
.addClass("hidden")
ke<input>
tag agar tidak pernah ditampilkan di browser?Sangat penting bahwa bidang input tidak memiliki
display: none
. Browser tidak akan memilih teks dan karenanya tidak akan disalin. Gunakanopacity: 0
dengan lebar 0px untuk memperbaiki masalah.sumber
Ini adalah metode paling sederhana untuk menyalin konten
sumber
solusi sederhana jQuery.
Harus dipicu oleh klik pengguna.
sumber
Anda bisa menggunakan lib ini untuk memudahkan mewujudkan tujuan penyalinan!
https://clipboardjs.com/
atau
https://github.com/zeroclipboard/zeroclipboard
http://zeroclipboard.org/
sumber
Teks yang akan disalin ada dalam input teks, seperti:
<input type="text" id="copyText" name="copyText">
dan, pada tombol klik teks di atas harus disalin ke clipboard, jadi tombolnya seperti:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button>
Script Anda harus seperti:Untuk file CDN
catatan :
ZeroClipboard.swf
danZeroClipboard.js
"file harus berada di folder yang sama dengan file Anda menggunakan fungsi ini, ATAU Anda harus memasukkan seperti yang kami sertakan<script src=""></script>
di halaman kami.sumber
Sebagian besar jawaban yang diajukan membuat elemen input tersembunyi sementara tambahan. Karena sebagian besar browser saat ini mendukung pengeditan konten div, saya mengusulkan solusi yang tidak membuat elemen tersembunyi, mempertahankan pemformatan teks dan menggunakan pustaka JavaScript atau jQuery murni.
Berikut ini adalah implementasi kerangka minimalis menggunakan baris kode paling sedikit yang dapat saya pikirkan:
sumber
Pustaka Clipboard-polyfill adalah polyfill untuk clipboard asinkron API modern berbasis Promise.
instal di CLI:
impor sebagai clipboard dalam file JS
contoh
Saya menggunakannya dalam satu bundel dengan
require("babel-polyfill");
dan mengujinya pada chrome 67. Semua baik untuk produksi.sumber
kode html di sini
KODE JS:
sumber
Anda dapat menyalin teks terpisah dari teks elemen HTML.
sumber
JS murni, tanpa onclick inline, untuk kelas yang dipasangkan "konten - tombol copy". Akan lebih nyaman, jika Anda memiliki banyak elemen)
Dukungan browser yang lebih lama:
Tampilkan cuplikan kode
sumber
Keduanya akan bekerja seperti pesona :),
JAVASCRIPT:
Juga di html,
JQUERY: https://paulund.co.uk/jquery-copy-clipboard
sumber