如何从 JavaScript 的段落元素中复制文本?
How to copy text from a paragraph elements from JavaScript?
您好,我是一名新开发人员,正在尝试建立一个网站。网站的主要目标是向访问者提供一段文字。我的一些助手给了我一个 javascript 来复制 <p></p>
元素中的文本。但它不起作用。当按钮为clicked.Somehow时,<p></p>
内的文本不会被复制。如果你知道答案,请使用我的常数、veriable和其他值。
我的 Javascript
var buttons = document.getElementsByClassName('copystatus');
for (let button of buttons) {
button.addEventListener('click', function() {
let statusElement = this.closest('.latestatus');
let textToCopy = statusElement.getElementsByClassName('copytxt')[0].innerHTML;
copyTextToClipboard(textToCopy);
addCopyStatusAlert(this.parentNode);
});
}
function copyTextToClipboard(text) {
const copyText = document.createElement('textarea');
copyText.style.position="absolute";
copyText.style.display="none";
copyText.value = text;
document.body.appendChild(copyText);
copyText.select();
document.execCommand('copy');
document.body.removeChild(copyText);
}
function addCopyStatusAlert(element) {
if (!element.getElementsByClassName('status-copy-alert').length) {
let copyAlertElement = document.createElement('span');
copyAlertElement.classList.add('status-copy-alert')
let copyMessage = document.createTextNode('Copied!');
copyAlertElement.appendChild(copyMessage);
element.appendChild(copyAlertElement);
setTimeout(function() {
element.removeChild(copyAlertElement);
}, 700);
}
}
我的Html
<div class="mainStatus">
<h2 class="statusHeading">Latest English Status</h2>
<div class="allStatus">
<div class="bock">
<div class="latestatus">
<p class="copytxt">Life is good when you have books</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
<div class="latestatus">
<p class="copytxt">Google is an open source library by Larry Page and Sergey Brin!</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
</div>
<div class="block">
<div class="latestatus">
<p class="copytxt">Cats are better than dogs.</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
<div class="latestatus">
<p class="copytxt">Cats are better than dogs.</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
</div>
</div>
</div>
请优化代码,以便它可以在单击相应按钮时复制 <p></p>
元素内的文本。
此外,任何人都可以修改上面的代码,这样我就不需要为 <p></p>
重复提供 class。(可选)
您需要将文本绘制到屏幕上以便可以选择它,请尝试删除 copyText.style.display="none";
,或用其他方法替换它,例如:
copyText.style.left="-99999px";
copyText.style.zIndex="99999";
是的,我们应该删除
copyText.style.display = "none"
那么代码将 运行 完美。
扎克的回答
谢谢
您好,我是一名新开发人员,正在尝试建立一个网站。网站的主要目标是向访问者提供一段文字。我的一些助手给了我一个 javascript 来复制 <p></p>
元素中的文本。但它不起作用。当按钮为clicked.Somehow时,<p></p>
内的文本不会被复制。如果你知道答案,请使用我的常数、veriable和其他值。
我的 Javascript
var buttons = document.getElementsByClassName('copystatus');
for (let button of buttons) {
button.addEventListener('click', function() {
let statusElement = this.closest('.latestatus');
let textToCopy = statusElement.getElementsByClassName('copytxt')[0].innerHTML;
copyTextToClipboard(textToCopy);
addCopyStatusAlert(this.parentNode);
});
}
function copyTextToClipboard(text) {
const copyText = document.createElement('textarea');
copyText.style.position="absolute";
copyText.style.display="none";
copyText.value = text;
document.body.appendChild(copyText);
copyText.select();
document.execCommand('copy');
document.body.removeChild(copyText);
}
function addCopyStatusAlert(element) {
if (!element.getElementsByClassName('status-copy-alert').length) {
let copyAlertElement = document.createElement('span');
copyAlertElement.classList.add('status-copy-alert')
let copyMessage = document.createTextNode('Copied!');
copyAlertElement.appendChild(copyMessage);
element.appendChild(copyAlertElement);
setTimeout(function() {
element.removeChild(copyAlertElement);
}, 700);
}
}
我的Html
<div class="mainStatus">
<h2 class="statusHeading">Latest English Status</h2>
<div class="allStatus">
<div class="bock">
<div class="latestatus">
<p class="copytxt">Life is good when you have books</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
<div class="latestatus">
<p class="copytxt">Google is an open source library by Larry Page and Sergey Brin!</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
</div>
<div class="block">
<div class="latestatus">
<p class="copytxt">Cats are better than dogs.</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
<div class="latestatus">
<p class="copytxt">Cats are better than dogs.</p>
<div>
<button class="copystatus btn">Copy</button>
</div>
</div>
</div>
</div>
</div>
请优化代码,以便它可以在单击相应按钮时复制 <p></p>
元素内的文本。
此外,任何人都可以修改上面的代码,这样我就不需要为 <p></p>
重复提供 class。(可选)
您需要将文本绘制到屏幕上以便可以选择它,请尝试删除 copyText.style.display="none";
,或用其他方法替换它,例如:
copyText.style.left="-99999px";
copyText.style.zIndex="99999";
是的,我们应该删除
copyText.style.display = "none"
那么代码将 运行 完美。
扎克的回答
谢谢