对于一个希望以易读、用户友好和快速的方式显示任何类型信息的网站来说,数据表是最重要和有用的元素之一
借助datatable.js JavaScript库,您可以轻松生成一个功能丰富的数据表,支持任何数据类型,如静态HTML表、js数组、js对象和Ajax JSON数据。它也是一个强大的JavaScript数据表插件,省去了构建自己的分页、过滤和排序引擎的所有麻烦。兼容jQuery和Vanilla JavaScript。
1.在文档中下载并加载Datatable.js插件的文件。
- <!-- Vanilla JS -->
- <link rel="stylesheet" href="css/datatable.min.css" />
- <script src="js/datatable.min.js"></script>
- <!-- jQuery -->
- <link rel="stylesheet" href="css/datatable.min.css" />
- <script src="js/datatable.min.js"></script>
- <script src="/path/to/cdn/jquery.min.js"></script>
- <script src="js/datatable.jquery.min.js"></script>
2.在HTML表旁边创建一个空的分页容器。
- <table class="table">
- <thead>
- ... table header ...
- </thead>
- <tbody>
- ... table body ...
- </tbody>
- </table>
- <!-- Pagination Links Will Be Placed Here -->
- <div id="myPagi"></div>
3.调用HTML表上的函数,插件会处理剩下的部分。
- // Vanilla JavaScript
- var myTable = new DataTable(document.querySelector('.table'), {
- // number of entries per page
- pageSize: 10,
- // enable SORT on specific columns
- sort: [true, true, false],
- // enable FILTER on specific columns
- filters: [true, false, 'select'],
- // selector of pagination control
- pagingDivSelector: "#myPagi",
- });
- // jQuery
- $('.table').datatable({
- // number of entries per page
- pageSize: 10,
- // enable SORT on specific columns
- sort: [true, true, false],
- // enable FILTER on specific columns
- filters: [true, false, 'select'],
- // selector of pagination control
- pagingDivSelector: "#myPagi",
- });
4.该插件不仅适用于堆叠的HTML表,还适用于以下任何数据类型:
- var myTable = new DataTable(document.querySelector('.table'), {
- data: [
- ['jQuery', 'Script'],
- ['Google', 'Com'],
- ['Facebook', 'Com']
- ]
- });
- // OR
- var myTable = new DataTable(document.querySelector('.table'), {
- data: [
- {firstname: 'jQuery', lastname: 'Script'},
- {firstname: 'Google', lastname: 'Com'},
- {firstname: 'Facebook', lastname: 'Com'}
- ]
- });
- // OR AJAX (JSON) Data
- var myTable = new DataTable(document.querySelector('.table'), {
- data: {
- // path to the service
- url: "/path/to/get",
- // post or get
- type: "post",
- // total amount of data to load,
- size: null,
- // determine whether to load all data in one AJAX call
- allInOne: false,
- // set to a positive value to refresh the data every X milliseconds
- refresh: false,
- }
- });
5.用于自定义数据表的所有默认选项和回调函数。
- var myTable = new DataTable(document.querySelector('.table'), {
- /**
- * Specify whether the type of the column should be deduced or not. If this option
- * is true, the type is not deduced (mainly here for backward compatibility).
- *
- * @see dataTypes
- */
- forceStrings: false,
- /**
- * Specify the class of the table.
- *
- */
- tableClass: 'datatable',
- /**
- * Specify the selector for the paging div element.
- *
- */
- pagingDivSelector: '.paging',
- /**
- * Specify the class for the paging div element.
- *
- */
- pagingDivClass: 'text-center',
- /**
- * Specify the class for the paging list element.
- *
- */
- pagingListClass: 'pagination',
- /**
- * Specify the class for the paging list item elements.
- *
- */
- pagingItemClass: '',
- /**
- * Specify the class for the paging list link elements.
- *
- */
- pagingLinkClass: '',
- /**
- * Specify the href attribute for the paging list link elements.
- *
- */
- pagingLinkHref: '',
- /**
- * Specify the tabindex attribute for the paging list link elements when
- * disabled.
- *
- */
- pagingLinkDisabledTabIndex: false,
- /**
- * Specify the selector for the counter div element.
- *
- * @see counterText
- */
- counterDivSelector: '.counter',
- /**
- * Specify the selector the loading div element.
- *
- * @see data
- */
- loadingDivSelector: '.loading',
- /**
- * Sepcify the sort options.
- *
- * @type boolean|string|Array|Object
- */
- sort: false,
- /**
- * Specify the default sort key.
- *
- * @type boolean|int|string.
- */
- sortKey: false,
- /**
- * Specify the default sort directions, 'asc' or 'desc'.
- *
- */
- sortDir: 'asc',
- /**
- * Specify the number of columns, a value of -1 (default) specify
- * the the number of columns should be retrieved for the <thead>
- * elements of the table.
- *
- */
- nbColumns: -1,
- /**
- * Specify the number of elements to display per page.
- *
- */
- pageSize: 20,
- /**
- * Specify the number of pages to display in the paging list element.
- *
- */
- pagingNumberOfPages: 9,
- /**
- * Specify the way of identifying items from the data array:
- *
- * - if this option is false (default), no identification is provided.
- * - if a Function is specified, the function is used to identify:
- * function (id, item) -> boolean
- * - if an int or a string is specified, items are identified by the
- * value corresponding to the key.
- *
- * @type boolean|int|string|Function.
- *
- */
- identify: false,
- /**
- * Callback function when the table is updated.
- *
- */
- onChange: function (oldPage, newPage) { },
- /**
- * Function used to generate content for the counter div element.
- *
- */
- counterText: function (currentPage, totalPage,
- firstRow, lastRow,
- totalRow, totalRowUnfiltered) {
- var counterText = 'Page ' + currentPage + ' on ' + totalPage
- + '. Showing ' + firstRow + ' to ' + lastRow + ' of ' + totalRow + ' entries';
- if (totalRow != totalRowUnfiltered) {
- counterText += ' (filtered from ' + totalRowUnfiltered + ' total entries)';
- }
- counterText += '.';
- return counterText;
- },
- /**
- * Content of the paging item pointing to the first page.
- *
- */
- firstPage: '<<',
- /**
- * Content of the paging item pointing to the previous page.
- *
- */
- prevPage: '<',
- /**
- *
- */
- pagingPages: false,
- /**
- * Content of the paging item pointing to the next page.
- *
- */
- nextPage: '>',
- /**
- * Content of the paging item pointing to the last page.
- *
- */
- lastPage: '>>',
- /**
- * Specify the type of the columns:
- *
- * - if false, the type is not deduced and values are treated as strings.
- * - if true, the type is deduced automatically.
- * - if an Array is specified, the type of each column is retrieve from the
- * array values, possible values are 'int', 'float' <> 'double', 'date' <> 'datetime',
- * false <> true <> 'string' <> 'str'. A function can also be specified to convert
- * the value.
- *
- * @see forceStrings
- *
- */
- dataTypes: true,
- /**
- * Specify the filter options.
- *
- */
- filters: {},
- /**
- * Specify the placeholder for the textual input filters.
- */
- filterText: 'Search... ',
- /**
- * Specify the placeholder for the select input filters.
- */
- filterEmptySelect: '',
- /**
- *
- */
- filterSelectOptions: false,
- /**
- *
- */
- filterInputClass: 'form-control',
- /**
- *
- */
- filterSelectClass: 'form-control',
- /**
- * Callback function before the display is reloaded.
- *
- */
- beforeRefresh: function () { },
- /**
- * Callback function after the display has been reloaded.
- *
- */
- afterRefresh: function () { },
- /**
- * Function used to generate the row of the table.
- *
- */
- lineFormat: function (id, data) {
- var res = document.createElement('tr');
- res.dataset.id = id;
- for (var key in data) {
- if (data.hasOwnProperty(key)) {
- res.innerHTML += '<td>' + data[key] + '</td>';
- }
- }
- return res;
- }
- });
- // OR
- var myTable = new DataTable(document.querySelector('.table'), {
- data: [
- {firstname: 'jQuery', lastname: 'Script'},
- {firstname: 'Google', lastname: 'Com'},
- {firstname: 'Facebook', lastname: 'Com'}
- ]
- });
- // OR AJAX (JSON) Data
- var myTable = new DataTable(document.querySelector('.table'), {
- data: {
- // path to the service
- url: "/path/to/get",
- // post or get
- type: "post",
- // total amount of data to load,
- size: null,
- // determine whether to load all data in one AJAX call
- allInOne: false,
- // set to a positive value to refresh the data every X milliseconds
- refresh: false,
- }
- });
- // jQuery
- $('.table').datatable({
- // number of entries per page
- pageSize: 10,
- // enable SORT on specific columns
- sort: [true, true, false],
- // enable FILTER on specific columns
- filters: [true, false, 'select'],
- // selector of pagination control
- pagingDivSelector: "#myPagi",
- });
6.API方法。
- // refresh the data table
- myTable.refresh();
- // destroy the plugin
- myTable.destroy();
- // set an option
- myTable.option(OptionName, Value);
- // load the specified page
- myTable.page(number);
- // get the current page number
- myTable.page();
- // reset all filters
- myTable.reset-filters();
- // retrieve all the element
- myTable.select();
- // retrieve the first element found with the specified ID
- myTable.select(ID);
- // retrieve a filtered set of elements
- myTable.select(FUNCTION);
- // add more data to the data array
- myTable.insert(Element/[E1, E2, ...]);
- // update the first element found with the specified ID with the new specified data
- myTable.update(ID, Element);
- // delete the first element found with the specified ID otherwise
- myTable.delete(ID);
- // delete all the element matching the specified function if a function is specified
- myTable.delete(FUNCTION);