Javascript CopytoClipboard功能只复制1行

时间:2017-10-04 07:20:11

标签: javascript php

所以我有一个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>

对不起,如果这里的格式错误,我总是很难用空格,因为我通常只使用标签。是的,所以只有第一行复制。

先谢谢。

2 个答案:

答案 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>