copy whole html table to clipboard javascript

前端 未结 8 1633
暗喜
暗喜 2021-01-05 06:58

I have write javascript to select the table but I want to now automaticaly copy it after the click of the button.Please help me.My javascript is like this.

f         


        
相关标签:
8条回答
  • 2021-01-05 07:17

    UPDATE

    Use this code instead.

    Code:

    function selectElementContents(el) {
        var body = document.body, range, sel;
        if (document.createRange && window.getSelection) {
            range = document.createRange();
            sel = window.getSelection();
            sel.removeAllRanges();
            try {
                range.selectNodeContents(el);
                sel.addRange(range);
            } catch (e) {
                range.selectNode(el);
                sel.addRange(range);
            }
        } else if (body.createTextRange) {
            range = body.createTextRange();
            range.moveToElementText(el);
            range.select();
            document.execCommand("copy");
        }
    }
    <input type="button" value="select table"
      onclick="selectElementContents( document.getElementById('table') );">
      
    <table id="table">
        <thead>
            <tr><th>Heading</th><th>Heading</th></tr>
        </thead>
        <tbody>
            <tr><td>cell</td><td>cell</td></tr>
        </tbody>
    </table>

    0 讨论(0)
  • 2021-01-05 07:21
    function selectElementContents(el) {
    var body = document.body, range, sel;
    if (document.createRange && window.getSelection) {
        range = document.createRange();
        sel = window.getSelection();
        sel.removeAllRanges();
        try {
            range.selectNodeContents(el);
            sel.addRange(range);
        } catch (e) {
            range.selectNode(el);
            sel.addRange(range);
        }
    } else if (body.createTextRange) {
        range = body.createTextRange();
        range.moveToElementText(el);
        range.select();
    }
    document.execCommand("Copy");}
    
    0 讨论(0)
  • 2021-01-05 07:30

    You can use this custom script, if you need to copy to clipboard all data from table; html:

    <button class='btnclipboard' data-source='tableStudents'> Copy table </button>
    
    <table id="tableStudents">
    <thead>
     <th> user_id </th>
     <th> Name </th> 
    </thead> 
    <tbody>
     <tr>
      <td> 123 </td>
      <td> Proba </td>
     </tr>
    <tbody>
    </table>
    
    <script>
        $('.btnclipboard').click(function(e) {
        e.preventDefault();
            copyTableToClipboard($(this).data('source'));
    });
    
    function copyTableToClipboard() {
    
    
    var clipboard=new Clipboard('.btnclipboard',{
    
        text: function(trigger) {
    
            var txt=[];
                    var headColumns = [];
                    $("#tableStudents th").each(function(){
                        var textColumn = $(this).text();
                        if(textColumn == null || textColumn == "") {
                            textColumn = $(this).attr('title');
                        }
                        if(textColumn == undefined || textColumn == null) {
                            textColumn = "";
                        }
                        headColumns.push(textColumn);
                        // console.log($(this).text());
                    });
                    console.log('headColumns', headColumns);
                    var head=headColumns;
                    txt.push(head.join("\t"));
    
                    var rowColumns=[];
                    $("#tableStudents tr").each(function(){
                        var row=[];
                        $(this).find('td').each(function(){
                            var textColumn = $(this).text();
                            if($(this).find("i").hasClass('fa-check')){
                                textColumn = "1";
                            }
                            // if(textColumn == "") {
                            //  // textColumn = $(this).attr('title');
                            //  textColumn = "";
                            // }
                            // if(textColumn != null) {
                                row.push(textColumn);
                            // }
                        //console.log($(this).text());
                        });
                        if(row.length > 0) {
                            rowColumns.push(row);
                            txt.push(row.join("\t"));
                        }
                    });
                    console.log('rowColumns', rowColumns);
                    return txt.join("\n");
        }
    
    
    });
    
    clipboard.on('success', function(e) {
    
        console.info('Action:', e.action);
        e.clearSelection();
    
        if (Notification.permission == "granted")
        {
            var notification = new Notification('Data copied to clipboard', {
                icon: '../dist/img/favicon.png',
                body: "You can now paste (Ctrl+v) into your favorite spreadsheet editor !"
            });
        }else{
            console.warn(Notification.permission);
        }
    });
    
    clipboard.on('error', function(e) {
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
    });
    }
    </script>
    

    After you click on the button, your table data should be copied.

    0 讨论(0)
  • 2021-01-05 07:33

    The previous scripts did not work for me because the .execCommand("Copy") was not triggering. By attaching it to the document itself, and moving it outside of the conditional, I was able to get it to work:

    I think this function is more robust:

      function selectElementContents(el) {
        var body = document.body, range, sel;
        if (document.createRange && window.getSelection) {
            range = document.createRange();
            sel = window.getSelection();
            sel.removeAllRanges();
            try {
                range.selectNodeContents(el);
                sel.addRange(range);
            } catch (e) {
                range.selectNode(el);
                sel.addRange(range);
            }
        } else if (body.createTextRange) {
            range = body.createTextRange();
            range.moveToElementText(el);
            range.select();
        }
        document.execCommand("Copy");
    }
    
    0 讨论(0)
  • 2021-01-05 07:34

    Try this:

    <script type="text/javascript">
    
    function copytable(el) {
        var urlField = document.getElementById(el)   
        var range = document.createRange()
        range.selectNode(urlField)
        window.getSelection().addRange(range) 
        document.execCommand('copy')
    }
    
    </script>
    
    <input type=button value="Copy to Clipboard" onClick="copytable('stats')">
    
    <table id=stats>
        <tr>
            <td>hello</td>
        </tr>
    </table>
    
    0 讨论(0)
  • 2021-01-05 07:34
    • This has worked for me, it is not only restricted to table, but it can even select and copy to clipboard all elements inside Node specified with id.

    • I have tested in Mac Chrome as well as windows chrome.

    • Usescase : Copy Signature created by Signature Generator based on JS

    Demo :

    <div id="signature_container">
      <p id="company_name" style="margin-top: 4px; margin-bottom: 0px; color: #522e64; font-weight: 700; font-size: 16px; letter-spacing: 1px; border-bottom: solid 2px #522e64; width:250px; padding-bottom: 3px;">The Company Name</p>
      <p style="margin-top: 4px; margin-bottom: 0px; color: #00706a; font-weight: 700; font-size: 15px;"> <span id="first_name_output_2"></span>Firstname<span id="last_name_output_2"> Lastname</span>&nbsp;&nbsp;&nbsp;&nbsp;<span id="designation_output_2" style="color: #000000; font-weight: 500; font-size: 15px;">Designation</span></p>
      <p style="margin-top: 0px; margin-bottom: 0px; color: #625469; font-weight: normal; font-size: 15px; letter-spacing: 0.6px;">youreamil@xyz.com<span id="email_output_2"></span>&nbsp;&nbsp;&nbsp;</p>
    </div>
    <br><br>
    <input type="button" onclick="selectElementContents( document.getElementById('signature_container') );" value="Copy to Clipboard">
    
    <script>
      function selectElementContents(el) {
        var body = document.body,
          range, sel;
        if (document.createRange && window.getSelection) {
          range = document.createRange();
          sel = window.getSelection();
          sel.removeAllRanges();
          range.selectNodeContents(el);
          sel.addRange(range);
        }
        document.execCommand("Copy");
      }
    </script>

    0 讨论(0)
提交回复
热议问题