Как я могу скопировать содержимое div
(или любого элемента) в буфер обмена, используя только JavaScript/jQuery без использования Flash?
Например, если у меня есть этот код:
<p id="mi_parrafo">
Texto que quiero copiar
</p>
<button>Copiar al portapapeles</button>
Что мне сделать, чтобы после нажатия кнопки, когда я нажимаю Ctr+ V, содержимое вставлялось внутри метки, отмеченной как #mi_parrafo
?
Есть по крайней мере один способ добиться этого без использования Flash: использование файла
copy
. Эта команда скопирует в буфер обмена текст, выделенный на странице во время ее выполнения.Итак, вы можете создать небольшую функцию, которая:
document.execCommand("copy")
:.Тогда содержимое выбранного элемента окажется в буфере обмена. Код будет таким:
Основная проблема этого решения в том, что не все браузеры поддерживают эту команду , хотя ее можно использовать в основных из:
Рабочая демонстрация кода:
Эквивалентную версию также можно создать с помощью jQuery:
Это работает аналогично приведенному выше примеру, хотя сообщалось о некоторых ошибках в Safari для Mac и 64-разрядной версии Chrome (дополнительные сведения см. В комментариях к исходной ссылке).
Источник: оригинальный ответ на сайте StackOverflow .
РАСШИРЕНИЕ: КОПИРОВАТЬ, СОХРАНЯЯ СТИЛИ
В другом вопросе о StackOverflow на испанском языке пользователь отметил, что форматирование/стили текста не были скопированы. Это связано с тем, что в приведенном выше коде он используется
input text
для копирования содержимого элемента, поэтому код HTML «теряется» (он интерпретируется буквально, а не как HTML). Если вместо использованияinput
использоватьdiv
редактируемый, форматирование не потеряется и может быть скопировано/вставлено со стилями:В качестве дополнения вы можете взглянуть на библиотеку clipboard.js , которая, как упоминает @Alvaro, использует execCommand , поэтому, согласно странице библиотеки, она работает в Chrome 42+, Firefox 41+, IE 9+ и Opera 29. +.
Это не работает для Safari, но когда вы пробуете его на iPad, он выбирает текст
input
, показывая при этом собственный вариант его копирования.Разница заключается в простоте использования , так как с небольшими затратами времени и усилий вы можете скопировать желаемое содержимое, следующий код копирует содержимое элемента
input
, но вы также можете копировать/вырезать содержимое другого элемента ( кнопки, div и т . д.). . ).это будет то же самое, что и у другого парня выше, но вместо ввода текстовая область, чтобы отступ уважал вас, если у вас более одной строки
Здравствуйте, мне было интересно, можно ли инкапсулировать то, что нужно скопировать.