所以我有一个PHP脚本会打印出一个项目列表,我想在那里添加一个按钮,将列表中的一个或多个项目复制到剪贴板。我找到了一个基本的Javascript函数(我对JavaScript btw没有任何线索)似乎工作得很好,但是如果我得到超过2行,复制函数将只复制第一行,除了它工作得很好。这是代码。
if (isset($_POST['create'])){
echo'<div class =" col-md-6 pull-right"><h3>Tokens you just generated below</h3><br>';
if((isset($_POST['create']) && ($insert_token && $stmt->rowCount())) >0){
foreach ($generatedtokens as $tokens){
$ListTokens = ($tokens['token'].' - '.$tokens['desc'].'<br>');
echo '<p id="tokens">'.nl2br($ListTokens).'</p>';
}
if (isset($_POST['create'])){
?>
<button onclick="copyToClipboard('#tokens')" class ="btn btn-primary">Copy Tokens</button>
<?php
echo '</div>';
}
}
}
?>
<script>
function copyToClipboard(element) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val($(element).text()).select();
document.execCommand("copy");
$temp.remove();
}
</script>
对不起,如果这里的格式错误,我总是很难用空格,因为我通常只使用标签。是的,所以只有第一行复制。
先谢谢。
答案 0 :(得分:4)
您试图获取所有id
代码中p
相同的元素值,因此只将一行复制到剪贴板。
function copyToClipboard(element) {
var text = '';
$('#itemlist p').each(function() {
text += '\r\n' + $(this).html() + '\r\n';
});
var input = document.createElement('textarea');
input.value = text;
document.body.appendChild(input);
input.select();
document.execCommand('copy');
document.body.removeChild(input)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="dontcopy">
<p>Dup Item 1</p>
<p>Dup Item 2</p>
<p>Dup Item 3</p>
<p>Dup Item 4</p>
</div>
<div id="itemlist">
<p>Item 1</p>
<p>Item 2</p>
<p>Item 3</p>
<p>Item 4</p>
</div>
<button onclick="copyToClipboard();" class ="btn btn-primary">Copy Tokens</button>
感谢输入@Mr。 Greenwoodz
答案 1 :(得分:2)
我已经编辑了您使用textarea发布的示例。现在也会复制换行符。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<div id="items">
<p>Item 1</p>
<p>Item 2</p>
<p>Item 3</p>
<p>Item 4</p>
</div>
<button onclick="copyToClipboard();" class ="btn btn-primary">Copy Tokens</button>
<script>
function copyToClipboard()
{
var texts = [];
var text = $('#items p')
var txtarea = document.createElement('textarea');
document.body.appendChild(txtarea);
text.each(function(index, value)
{
txtarea.append(value.innerHTML + '\n');
});
txtarea.select();
document.execCommand('copy');
document.body.removeChild(txtarea);
}
</script>
</body>