Вот мой код, когда пользователь нажимает на эту кнопку:
<button id="button1">Click to copy</button>
Как мне скопировать текст внутри этого div?
<div id="div1">Text To Copy</div>
Вот мой код, когда пользователь нажимает на эту кнопку:
<button id="button1">Click to copy</button>
Как мне скопировать текст внутри этого div?
<div id="div1">Text To Copy</div>
Оба будут работать как шарм :),
JAVASCRIPT:
function CopyToClipboard(containerid) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById(containerid));
range.select().createTextRange();
document.execCommand("copy");
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(document.getElementById(containerid));
window.getSelection().addRange(range);
document.execCommand("copy");
alert("text copied")
}}
Также в HTML,
<button id="button1" onclick="CopyToClipboard('div1')">Click to copy</button>
<div id="div1" >Text To Copy </div>
<textarea placeholder="Press ctrl+v to Paste the copied text" rows="5" cols="20"></textarea>
Вот фрагмент.
function CopyToClipboard(containerid) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById(containerid));
range.select().createTextRange();
document.execCommand("copy");
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(document.getElementById(containerid));
window.getSelection().addRange(range);
document.execCommand("copy");
alert("text copied, copy in the text-area")
}
}
<button id="button1" onclick="CopyToClipboard('div1')">Click to copy</button>
<div id="div1">Text To Copy </div>
<textarea placeholder="Press ctrl+v to Paste the copied text" rows="5" cols="20"></textarea>
Я попробовал решение, предложенное выше. Но это не было достаточно кросс-браузерным. Мне действительно нужно было 11, чтобы работать. После попытки я добрался до:
<html>
<body>
<div id="a" onclick="copyDivToClipboard()"> Click to copy </div>
<script>
function copyDivToClipboard() {
var range = document.createRange();
range.selectNode(document.getElementById("a"));
window.getSelection().removeAllRanges(); // clear current selection
window.getSelection().addRange(range); // to select text
document.execCommand("copy");
window.getSelection().removeAllRanges();// to deselect
}
</script>
</body>
</html>
Протестировано с Firefox 64, Chrome 71, Opera 57, т.е. 11 (11.472.17134.0), edge (EdgeHTML 17.17134)
Обновление 27 марта 2019 года.
По какой-то причине document.createRange()
раньше не работал с ie11. Но теперь правильно возвращает объект Range. Так что лучше использовать это, чем document.getSelection().getRangeAt(0)
.
Принятый ответ не работает, если у вас есть несколько элементов для копирования, и каждый из них имеет отдельную кнопку "Копировать в буфер обмена". После нажатия одной кнопки остальные не будут работать.
Чтобы они работали, я добавил код в принятую функцию ответа, чтобы очистить выделенные тексты, прежде чем делать новый:
function CopyToClipboard(containerid) {
if (window.getSelection) {
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
} else if (document.selection) { // IE?
document.selection.empty();
}
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById(containerid));
range.select().createTextRange();
document.execCommand("copy");
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(document.getElementById(containerid));
window.getSelection().addRange(range);
document.execCommand("copy");
}
}
Добавление ссылки в качестве ответа, чтобы привлечь больше внимания к комментарию Аарона Лавера ниже первого ответа.
Это работает как шарм - http://clipboardjs.com. Просто добавьте файл clipboard.js или min. При запуске используйте класс, для которого нужно щелкнуть html-компонент, и просто передать идентификатор компонента с копируемым содержимым, щелчком элемента.
Это решение добавляет отмену выделения текста после копирования в буфер обмена:
function copyDivToClipboard(elem) {
var range = document.createRange();
range.selectNode(document.getElementById(elem));
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand("copy");
window.getSelection().removeAllRanges();
}
Я получаю selectNode() параметр 1 не имеет типа узла ошибка.
изменил код на это и работает. (для хрома)
function copy_data(containerid) {
var range = document.createRange();
range.selectNode(containerid); //changed here
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand("copy");
window.getSelection().removeAllRanges();
alert("data copied");
}
<div id="select_txt">This will be copied to clipboard!</div>
<button type="button" onclick="copy_data(select_txt)">copy</button>
<br>
<hr>
<p>Try paste it here after copying</p>
<textarea></textarea>
Ни один из них не работал для меня. Но я нашел дубликат вопроса, который у меня сработал.
Вот ссылка link