Как мне скопировать текст внутри div в буфер обмена? У меня есть div и мне нужно добавить ссылку, которая добавит текст в буфер обмена. Есть ли решение для этого?
<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>
После того, как я нажму кнопку «Копировать текст», затем нажму « Ctrl+» V, она должна быть вставлена.
Ответы:
Редактировать с 2016 года
Начиная с 2016 года, теперь вы можете копировать текст в буфер обмена в большинстве браузеров, потому что большинство браузеров имеют возможность программно копировать выделенный текст в буфер обмена, используя
document.execCommand("copy")
этот вариант .Как и в случае некоторых других действий в браузере (например, открытие нового окна), копирование в буфер обмена может быть выполнено только с помощью определенного действия пользователя (например, щелчка мыши). Например, это не может быть сделано через таймер.
Вот пример кода:
Вот немного более продвинутая демонстрация: https://jsfiddle.net/jfriend00/v9g1x0o6/
И вы также можете получить готовую библиотеку, которая сделает это за вас с clipboard.js .
Старая, историческая часть ответа
Прямое копирование в буфер обмена с помощью JavaScript не разрешено никаким современным браузером из соображений безопасности. Наиболее распространенный обходной путь - использование возможности Flash для копирования в буфер обмена, которая может быть вызвана только прямым щелчком пользователя.
Как уже упоминалось, ZeroClipboard - это популярный набор кода для управления объектом Flash, который выполняет копирование. Я использовал это. Если Flash установлен на устройстве просмотра (которое исключает мобильный или планшет), это работает.
Следующий наиболее распространенный обходной путь - просто поместить связанный с буфером обмена текст в поле ввода, переместить фокус на это поле и посоветовать пользователю нажать Ctrl+, Cчтобы скопировать текст.
Другие обсуждения проблемы и возможные обходные пути можно найти в этих предыдущих сообщениях переполнения стека:
Как мне скопировать в буфер обмена в JavaScript?
Как скопировать текст в буфер обмена клиента с помощью jQuery?
Как вы можете скопировать в буфер без Flash?
Эти вопросы, требующие современной альтернативы использованию Flash, получили множество положительных отзывов и не получили ответов с решением (вероятно, потому что ни один не существует):
HTML5 альтернатива флеш-памяти ZeroClipboard для безопасного копирования данных в буфер обмена?
Копировать в буфер без Flash
У Internet Explorer и Firefox были нестандартные API для доступа к буферу обмена, но их более современные версии не рекомендовали эти методы (возможно, по соображениям безопасности).
В зарождающихся стандартах предпринимаются попытки найти «безопасный» способ решения наиболее распространенных проблем с буфером обмена (вероятно, требующих определенных действий пользователя, таких как решение Flash), и похоже, что он может быть частично реализован в последней версии. версии Firefox и Chrome, но я еще не подтвердил это.
источник
document.execCommand("copy")
при достаточных обстоятельствах, чтобы использовать его для этого. Итак, я стараюсь держать свой ответ в актуальном состоянии (который был создан почти 2 года назад). У нас все еще нет надежного решения для Safari, кроме предварительного выбора текста и указания пользователю вручную нажимать Ctrl + C, но, по крайней мере, прогресс в других местах.document.execCommand("copy")
поэтому этот код теперь должен работать в Safari 10.Существует еще один способ, отличный от Flash (кроме API буфера обмена, упомянутого в ответе jfriend00 ). Вам нужно выделить текст, а затем выполнить команду,
copy
чтобы скопировать в буфер обмена любой текст, выбранный в данный момент на странице.Например, эта функция скопирует содержимое переданного элемента в буфер обмена (обновлено с предложением в комментариях от PointZeroTwo ):
Вот как это работает:
document.execCommand("copy")
.Вы можете увидеть быстрое демо здесь:
Основная проблема заключается в том, что в настоящее время не все браузеры поддерживают эту функцию, но вы можете использовать ее в основных из:
Обновление 1: Это может быть достигнуто также с помощью чистого решения JavaScript (без jQuery):
Обратите внимание, что мы передаем идентификатор без # сейчас.
Как сообщил Мадзохан в комментариях ниже, в некоторых случаях возникает проблема с 64-разрядной версией Google Chrome (локальный запуск файла). Эта проблема, кажется, решена с помощью решения не-jQuery выше.
Мадзохан попробовал в Safari, и решение работало, но использовалось
document.execCommand('SelectAll')
вместо использования.select()
(как указано в чате и в комментариях ниже).Как указывает PointZeroTwo в комментариях , код можно улучшить, чтобы он возвращал результат успеха / неудачи. Вы можете увидеть демо на этом jsFiddle .
ОБНОВЛЕНИЕ: КОПИЯ, СОХРАНЯЯ ФОРМАТ ТЕКСТА
Как указал пользователь в испанской версии StackOverflow , перечисленные выше решения отлично работают, если вы хотите буквально скопировать содержимое элемента, но не очень хорошо работают, если вы хотите вставить скопированный текст с форматом (как это скопировано в
input type="text"
, формат "потерян").Решением для этого было бы скопировать в редактируемый контент,
div
а затем скопировать его, используяexecCommand
аналогичным образом. Здесь есть пример - нажмите на кнопку копирования, а затем вставьте в поле для редактирования контента ниже:А в jQuery это было бы так:
источник
aux.style.position = "fixed";
aux.style.top = 0;
надappendChild
вызовом.clipboard.js - хорошая утилита, которая позволяет копировать текстовые или HTML-данные в буфер обмена без использования Flash. Это очень легко использовать; просто включите .js и используйте что-то вроде этого:
clipboard.js также есть на GitHub .
Изменение от 15 января 2016 года. Верхний ответ был отредактирован сегодня для ссылки на тот же API в моем ответе, опубликованном в августе 2015 года. В предыдущем тексте было указание пользователям использовать ZeroClipboard. Просто хочу прояснить, что я не выдернул это из ответа jfriend00, а наоборот.
источник
Простота есть основа утонченности.
Если вы не хотите, чтобы текст, который нужно скопировать, был виден:
jQuery:
HTML:
источник
С разрывами строк (продолжение ответа от Альваро Монторо)
источник
Вы можете использовать этот код для копирования входного значения на странице в буфере обмена, нажав кнопку
Это HTML
Тогда для этого HTML, мы должны использовать этот код JQuery
Это самое простое решение для этого вопроса
источник
Еще лучший подход без flash или каких-либо других требований - это clipboard.js . Все, что вам нужно сделать, это добавить
data-clipboard-target="#toCopyElement"
любую кнопку, инициализировать ее,new Clipboard('.btn');
и она скопирует содержимое DOM с идентификаторомtoCopyElement
в буфер обмена. Это фрагмент, который копирует текст, указанный в вашем вопросе, по ссылке.Одно из ограничений заключается в том, что он не работает в сафари, но работает во всех других браузерах, включая мобильные, поскольку не использует флэш-память.
источник
источник
источник
.addClass("hidden")
в<input>
тег, чтобы он никогда не показывался в браузере?Очень важно, чтобы поле ввода не имело
display: none
. Браузер не будет выделять текст и, следовательно, не будет скопирован. Используйтеopacity: 0
ширину 0px, чтобы решить проблему.источник
Это самый простой способ скопировать контент
источник
JQuery простое решение.
Должен быть активирован по клику пользователя.
источник
Вы можете просто использовать эту библиотеку для легкой реализации цели копирования!
https://clipboardjs.com/
или
https://github.com/zeroclipboard/zeroclipboard
http://zeroclipboard.org/
источник
Текст для копирования находится в текстовом вводе, например:
<input type="text" id="copyText" name="copyText">
и при нажатии кнопки выше текст должен быть скопирован в буфер обмена, поэтому кнопка выглядит так:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button>
Ваш сценарий должен быть похож на:Для файлов CDN
примечание :
ZeroClipboard.swf
иZeroClipboard.js
"файл должен находиться в той же папке, что и ваш файл с использованием этой функции, ИЛИ вы должны включить то, что мы включаем<script src=""></script>
в наши страницы.источник
Большинство из предложенных ответов создают дополнительные временные скрытые элементы ввода. Поскольку в настоящее время большинство браузеров поддерживают редактирование содержимого div, я предлагаю решение, которое не создает скрытый элемент (элементы), сохраняет форматирование текста и использует чистый JavaScript или библиотеку jQuery.
Вот минималистичная реализация скелета, использующая наименьшее количество строк кода, о которых я мог подумать:
источник
Библиотека Clipboard-polyfill является полифилом для современного API-интерфейса для асинхронного буфера обмена на основе Promise.
установить в CLI:
импортировать как буфер обмена в файл JS
пример
Я использую его в связке
require("babel-polyfill");
и проверил на Chrome 67. Все хорошо для производства.источник
HTML-код здесь
JS CODE:
источник
Вы можете скопировать отдельный текст отдельно от текста HTML-элемента.
источник
Чистый JS, без встроенного onclick, для парных классов «контент - кнопка копирования». Было бы удобнее, если бы у вас было много элементов)
Поддержка старых браузеров:
Показать фрагмент кода
источник
Оба будут работать как шарм :),
JAVASCRIPT:
Также в HTML,
JQUERY: https://paulund.co.uk/jquery-copy-clipboard
источник