Documentation v1.1.0

Preview Purchase

DataTables Export

Buttons  extension for DataTables provides a framework with common options and API that can be used with DataTables, but is also very extensible, recognising that you will likely want to use buttons which perform an action unique to your applications.
Customer Name Email Status Date Joined No. Orders No. Products Total
Emma Smith smith@kpmg.com
Active
24 Jun 2022, 9:23 pm 64 76 $205.00
Melody Macy melody@altbox.com
Active
10 Nov 2022, 5:20 pm 64 77 $2111.00
Max Smith max@kt.com
Active
24 Jun 2022, 6:05 pm 60 70 $2286.00
Sean Bean sean@dellito.com
Active
25 Jul 2022, 10:10 pm 19 28 $3472.00
Brian Cox brian@exchange.com
Active
19 Aug 2022, 11:30 am 18 30 $1418.00
Mikaela Collins mik@pex.com
Active
15 Apr 2022, 10:30 am 29 34 $904.00
Francis Mitcham f.mit@kpmg.com
Active
10 Nov 2022, 5:30 pm 44 51 $3725.00
Olivia Wild olivia@corpmail.com
Active
22 Sep 2022, 2:40 pm 56 68 $3774.00
Neil Owen owen.neil@gmail.com
Active
24 Jun 2022, 10:30 am 54 63 $4881.00
Dan Wilson dam@consilting.com
Active
24 Jun 2022, 5:30 pm 77 89 $2874.00
Emma Bold emma@intenso.com
Active
21 Feb 2022, 11:05 am 95 107 $898.00
Ana Crown ana.cf@limtel.com
Active
20 Dec 2022, 5:30 pm 76 82 $4293.00
Robert Doe robert@benko.com
Active
05 May 2022, 6:05 pm 6 14 $2923.00
John Miller miller@mapple.com
Active
15 Apr 2022, 8:43 pm 15 28 $1961.00
Lucy Kunic lucy.m@fentech.com
Active
05 May 2022, 2:40 pm 34 49 $1966.00
Ethan Wilder ethan@loop.com.au
Active
15 Apr 2022, 11:30 am 90 103 $2253.00
John Miller miller@mapple.com
Active
20 Dec 2022, 5:20 pm 86 95 $2481.00
Emma Smith smith@kpmg.com
Active
10 Nov 2022, 11:30 am 28 41 $4105.00
Melody Macy melody@altbox.com
Active
22 Sep 2022, 11:05 am 50 64 $4997.00
Max Smith max@kt.com
Active
21 Feb 2022, 6:05 pm 33 43 $3129.00
Sean Bean sean@dellito.com
Active
20 Dec 2022, 9:23 pm 30 40 $3720.00
Brian Cox brian@exchange.com
Active
24 Jun 2022, 11:05 am 13 20 $432.00
Mikaela Collins mik@pex.com
Active
15 Apr 2022, 6:05 pm 87 101 $1461.00
Francis Mitcham f.mit@kpmg.com
Active
10 Mar 2022, 11:05 am 42 51 $2199.00
Olivia Wild olivia@corpmail.com
Active
25 Jul 2022, 5:30 pm 16 22 $3753.00
<div class="card card-p-0 card-flush">
 <div class="card-header align-items-center py-5 gap-2 gap-md-5">
  <div class="card-title">
   <!--begin::Search-->
   <div class="d-flex align-items-center position-relative my-1">
    <span class="svg-icon svg-icon-1 position-absolute ms-4">...</span>
    <input type="text" data-kt-filter="search" class="form-control form-control-solid w-250px ps-14" placeholder="Search Report" />
   </div>
   <!--end::Search-->
   <!--begin::Export buttons-->
   <div id="kt_datatable_example_1_export" class="d-none"></div>
   <!--end::Export buttons-->
  </div>
  <div class="card-toolbar flex-row-fluid justify-content-end gap-5">
   <!--begin::Export dropdown-->
   <button type="button" class="btn btn-light-primary" data-kt-menu-trigger="click" data-kt-menu-placement="bottom-end">
    <span class="svg-icon svg-icon-1 position-absolute ms-4">...</span>
    Export Report
   </button>
   <!--begin::Menu-->
   <div id="kt_datatable_example_export_menu" class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold fs-7 w-200px py-4" data-kt-menu="true">
    <!--begin::Menu item-->
    <div class="menu-item px-3">
     <a href="#" class="menu-link px-3" data-kt-export="copy">
     Copy to clipboard
     </a>
    </div>
    <!--end::Menu item-->
    <!--begin::Menu item-->
    <div class="menu-item px-3">
     <a href="#" class="menu-link px-3" data-kt-export="excel">
     Export as Excel
     </a>
    </div>
    <!--end::Menu item-->
    <!--begin::Menu item-->
    <div class="menu-item px-3">
     <a href="#" class="menu-link px-3" data-kt-export="csv">
     Export as CSV
     </a>
    </div>
    <!--end::Menu item-->
    <!--begin::Menu item-->
    <div class="menu-item px-3">
     <a href="#" class="menu-link px-3" data-kt-export="pdf">
     Export as PDF
     </a>
    </div>
    <!--end::Menu item--> 
   </div>
   <!--end::Menu-->
   <!--end::Export dropdown-->

   <!--begin::Hide default export buttons-->
   <div id="kt_datatable_example_buttons" class="d-none"></div>
   <!--end::Hide default export buttons->
  </div>
 </div>
 <div class="card-body">
  <table class="table align-middle border rounded table-row-dashed fs-6 g-5" id="kt_datatable_example">
   <thead>
    <!--begin::Table row-->
    <tr class="text-start text-gray-400 fw-bold fs-7 text-uppercase">
     <th class="min-w-100px">Customer Name</th>
     <th class="min-w-100px">Email</th>
     <th class="min-w-100px">Status</th>
     <th class="min-w-100px">Date Joined</th>
     <th class="text-end min-w-75px">No. Orders</th>
     <th class="text-end min-w-75px">No. Products</th>
     <th class="text-end min-w-100px pe-5">Total</th>
    </tr>
    <!--end::Table row-->
   </thead>
   <tbody class="fw-semibold text-gray-600">
    <tr class="odd">
     <td>
      <a href="#" class="text-dark text-hover-primary">Emma Smith</a>
     </td>
     <td>
      <a href="#" class="text-dark text-hover-primary">e.smith@kpmg.com.au</a>
     </td>
     <td>
      <div class="badge badge-light-success">Active</div>
     </td>
     <td data-order="2022-03-10T14:40:00+05:00">10 Mar 2022, 2:40 pm</td>
     <td class="text-end pe-0">94</td>
     <td class="text-end pe-0">103</td>
     <td class="text-end">$500.00</td>
    </tr>
   </tbody>
  </table>
 </div>
</div>
"use strict";

// Class definition
var KTDatatablesExample = function () {
    // Shared variables
    var table;
    var datatable;

    // Private functions
    var initDatatable = function () {
        // Set date data order
        const tableRows = table.querySelectorAll('tbody tr');

        tableRows.forEach(row => {
            const dateRow = row.querySelectorAll('td');
            const realDate = moment(dateRow[3].innerHTML, "DD MMM YYYY, LT").format(); // select date from 4th column in table
            dateRow[3].setAttribute('data-order', realDate);
        });

        // Init datatable --- more info on datatables: https://datatables.net/manual/
        datatable = $(table).DataTable({
            "info": false,
            'order': [],
            'pageLength': 10,
        });
    }

    // Hook export buttons
    var exportButtons = () => {
        const documentTitle = 'Customer Orders Report';
        var buttons = new $.fn.dataTable.Buttons(table, {
            buttons: [
                {
                    extend: 'copyHtml5',
                    title: documentTitle
                },
                {
                    extend: 'excelHtml5',
                    title: documentTitle
                },
                {
                    extend: 'csvHtml5',
                    title: documentTitle
                },
                {
                    extend: 'pdfHtml5',
                    title: documentTitle
                }
            ]
        }).container().appendTo($('#kt_datatable_example_buttons'));

        // Hook dropdown menu click event to datatable export buttons
        const exportButtons = document.querySelectorAll('#kt_datatable_example_export_menu [data-kt-export]');
        exportButtons.forEach(exportButton => {
            exportButton.addEventListener('click', e => {
                e.preventDefault();

                // Get clicked export value
                const exportValue = e.target.getAttribute('data-kt-export');
                const target = document.querySelector('.dt-buttons .buttons-' + exportValue);

                // Trigger click event on hidden datatable export buttons
                target.click();
            });
        });
    }

    // Search Datatable --- official docs reference: https://datatables.net/reference/api/search()
    var handleSearchDatatable = () => {
        const filterSearch = document.querySelector('[data-kt-filter="search"]');
        filterSearch.addEventListener('keyup', function (e) {
            datatable.search(e.target.value).draw();
        });
    }

    // Public methods
    return {
        init: function () {
            table = document.querySelector('#kt_datatable_example');

            if ( !table ) {
                return;
            }

            initDatatable();
            exportButtons();
            handleSearchDatatable();
        }
    };
}();

// On document ready
KTUtil.onDOMContentLoaded(function () {
    KTDatatablesExample.init();
});
Learn & Get Inspired

Support at devs.keenthemes.com

Join our developers community to find answer to your question and help others. FAQs
Get Support
Documentation
From guides and how-tos, to live demos and code examples to get started right away.
Plugins & Components
Check out our 300+ in-house components and customized 3rd-party plugins.
Layout Builder
Build your layout, preview it and export the HTML for server side integration.
What's New
Latest features and improvements added with our users feedback in mind.
Buy now