Demo: ma125120.GitHub.IO/ma-Dom/тест…
Этот метод в основном используетRangeОбъекты и HTML5Selection API, После тестирования этот метод хорошо работает в основных браузерах, таких как Google Chrome, браузер Firefox, браузер безопасности 360 и высокоскоростной браузер Sogou.
Сначала прикрепите код, который вы больше всего хотите видеть:
function copy(el) {
var range = document.createRange();
var end = el.childNodes.length;
range.setStart(el,0);
range.setEnd(el,end);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
document.execCommand("copy",false,null);
selection.removeRange(range);
}
Этапы реализации
- Первый — использовать **document.createRange()**СоздаватьRangeобъекта, а затем получить длину и размер дочерних элементов копируемого элемента, а затем вызвать методы setStart и setEnd объекта Range, чтобы установить размер области выделения.
- В это время задается только размер области выделения.На самом деле в окне она реально не выделена,поэтому необходимо вызыватьwindow.getSelection()генерироватьSelectionобъект, лучше всего вызвать перед добавлением выбораselection.removeAllRanges()Снимите другие выделения, иначе браузер может выдать следующее предупреждение перед вызовом объекта Selection.addRangeметод, передайте диапазон предыдущего шага в качестве параметра, и тогда копируемый элемент может быть фактически установлен в качестве выделенной области.
- Теперь вы можете вызвать его после выделения текста, как обычноdocument.execCommandчтобы скопировать текст выделенной области в буфер обмена.
- Наконец, вам нужно позвонитьSelectionМетод removeRange объекта будетRangeОбъект удаляется, чтобы гарантировать, что в выделенной области всегда будет только один выделенный элемент, иначе некоторые браузеры могут в следующий раз выдать предупреждение или ошибку, потому что выделенных элементов два.
Другие ситуации
(Спасибо за вопрос, иначе я бы его не нашел)
Приведенный выше код подходит для элементов, не являющихся элементами формы, если это элемент формы, вам не нужно использоватьSelection API, просто используйтеel.select(); document.execCommand("copy",false,null);можно объединить вместе
function copy(el) {
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
el.select();
} else {
var range = document.createRange();
var end = el.childNodes.length;
range.setStart(el,0);
range.setEnd(el,end);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
document.execCommand("copy",false,null);
range && selection.removeRange(range);
}
Уведомление
--
При вызове этой функции она должна быть после нажатия кнопки или нажатия с помощьюuser-select: noneатрибут элемента, иначе браузер может выдать такое предупреждение:[Deprecation] The behavior that Selection.addRange() merges existing Range and the specified Range was removed. See woohoo. chrome status.com/features/66… for more details.
Наконец, прикрепите адрес github:GitHub.com/ma125120/ma….
следовать за
Эта функция на самом деле относительно проста.Если вы хотите использовать более полную функцию, например, добавить дополнительный текст в конце после копирования содержимого, вы можете использовать эту функцию в другой моей библиотеке.copy.js. Способ использования описан в readme.md.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте свои комментарии в разделе комментариев ниже.