以前曾對 DataTable 做過完整測試, 參考 :
但現在 DataTables 已隨著 jQuery UI 與 Bootstrap 的發展改版多次, 且許多函數使用方式也已經與之前大不同, 需要重新改寫之前的程式碼, 參考 :
# https://datatables.net/
由於 DataTables 與 jQuery UI 以及 Bootstrap 這兩個函式庫在 UI 上的黏合度非常高, 所以下載時需選定風格與版本 :
# https://datatables.net/download/
首先選擇樣式框架, 此處選 jQuery UI :
其次選擇函式庫, 由於 jQuery UI 最新版 v1.12.1 搭配 jQuery v1.12.4, 因此點選 jQuery 1 :
最後點選 Minified 與 Concatenate 後下載 zip 檔 :
將 zip 檔解壓縮後會產生一個 DataTables 目錄 :
將裡面的 datatables.js 與 datatables.css 這兩個檔案複製到專案目錄的 jquery 子目錄下 :
這樣就可以使用 DataTables 來呈現可排序的動態表格了, 網頁應用程式也要加上 DataTables 的程式與樣式, 將上一篇中的範例 1 修改為如下 :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<script src="bootstrap/bootstrap.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<link href="bootstrap/bootstrap.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#tabs-1">tab1</a></li>
<li><a href="#tabs-2">tab2</a></li>
<li><a href="#tabs-3">tab3</a></li>
</ul>
<div id="tabs-1">tab1</div>
<div id="tabs-2">tab2</div>
<div id="tabs-3">tab3</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
});
</script>
</body>
</html>
高亮度者為新增加的部分. DataTables 的教學文件與範例參考 :
# https://datatables.net/manual
# https://datatables.net/examples/index
DataTables 的資料來源有三種 :
# https://datatables.net/examples/data_sources/dom.html (HTML 表格)
# https://datatables.net/examples/data_sources/js_array.html (JSON 物件)
如果資料是放在 HTML 表格中, 則在取得 table 元素的 jQuery 物件後直接呼叫 DataTable() 函數即可產生動態表格 :
$("#mytable").DataTable();
注意, 函數名稱是單數的 DataTable(), 不是 DataTables().
如果資料是放在 Javascript 陣列中, 則必須在呼叫 DataTable() 函數時傳入一個包含 data 與 columns 屬性的物件, data 的值為代表資料的二維陣列; 而 columns 則是代表表格欄位名稱的一維陣列 (具有 title 屬性物件), 例如 :
var dataset=[[row1], [row2], [row3], .... ];
var column_names=[{title: '欄1'}, {title: '欄2'}, {title: '欄3'}, ...];
$("#scores" ).DataTable({data: dataset,
columns: column_names
});
下面範例中, 頁籤 1 資料來源是 HTML 表格, 頁籤 2 與 3 資料來源是 Javascript 陣列, 但頁籤 3 是在 table 元件外加一層 div 容器, 套用 Bootstrap 的 table-responsive 自適應樣式, 這樣當表格資料長寬超過 tabs 時就會出現卷軸 :
範例 5 : DataTables表格
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<script src="bootstrap/bootstrap.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<link href="bootstrap/bootstrap.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#tabs-1">HTML 表格</a></li>
<li><a href="#tabs-2">Javascript 陣列</a></li>
<li><a href="#tabs-3">Javascript 陣列 (自適應)</a></li>
</ul>
<div id="tabs-1">
<table id="scores1">
<thead>
<tr>
<th>姓名</th>
<th>國文</th>
<th>英文</th>
<th>數學</th>
<th>物理</th>
<th>化學</th>
<th>歷史</th>
<th>地理</th>
</tr>
</thead>
<tbody>
<tr>
<td>王小二</td>
<td>56</td>
<td>78</td>
<td>88</td>
<td>45</td>
<td>89</td>
<td>65</td>
<td>73</td>
</tr>
<tr>
<td>李大明</td>
<td>86</td>
<td>93</td>
<td>79</td>
<td>85</td>
<td>90</td>
<td>87</td>
<td>75</td>
</tr>
<tr>
<td>張阿花</td>
<td>100</td>
<td>98</td>
<td>75</td>
<td>95</td>
<td>89</td>
<td>100</td>
<td>95</td>
</tr>
</tbody>
</table>
</div>
<div id="tabs-2">
<table id="scores2"></table>
</div>
<div id="tabs-3">
<div class="container table-responsive">
<table id="scores3"></table>
</div>
</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
$("#scores1" ).DataTable();
var columns=[{title: '姓名'},
{title: '國文'},
{title: '英文'},
{title: '數學'},
{title: '物理'},
{title: '化學'},
{title: '歷史'},
{title: '地理'}
];
var data=[['王小二', '56', '78', '88', '45', '89', '65', '73'],
['李大明', '86', '93', '79', '85', '90', '87', '75'],
['張阿花', '100', '98', '75', '95', '89', '100', '95']];
$("#scores2" ).DataTable({
data: data,
columns: columns,
autoWidth: true
});
$("#scores3" ).DataTable({
data: data,
columns: columns
});
});
</script>
</body>
</html>
結果如下 :
DataTable() 函數還可以傳入更多選項物件進行表格設定, 參考 :
# https://datatables.net/reference/option/
2020-08-19 補充 :
由於 Bootstrap 會干擾 jQuery UI 的主題佈景樣式, 所以決定拿掉 Bootstrap, 單純使用 jQuery UI 與 DataTables 外掛, 將範例 5 刪除 Bootstrap 並添加主題佈景選擇器後結果如下 :
範例 5-1 : 刪除 Bootstrap 並加入主題佈景選擇器之 DataTables表格
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<!-- 主題佈景選擇器 -->
<select id="themes">
<option value="base">base</option>
<option value="black-tie">black-tie</option>
<option value="blitzer">blitzer</option>
<option value="cupertino">cupertino</option>
<option value="dark-hive">dark-hive</option>
<option value="dot-luv">dot-luv</option>
<option value="eggplant">eggplant</option>
<option value="excite-bike">excite-bike</option>
<option value="flick">flick</option>
<option value="hot-sneaks">hot-sneaks</option>
<option value="humanity">humanity</option>
<option value="le-frog">le-frog</option>
<option value="mint-choc">mint-choc</option>
<option value="overcast">overcast</option>
<option value="pepper-grinder">pepper-grinder</option>
<option value="redmond">redmond</option>
<option value="smoothness">smoothness</option>
<option value="south-street">south-street</option>
<option value="start">start</option>
<option value="sunny">sunny</option>
<option value="swanky-purse">swanky-purse</option>
<option value="trontastic">trontastic</option>
<option value="ui-darkness">ui-darkness</option>
<option value="ui-lightness">ui-lightness</option>
<option value="vader">vader</option>
</select>
<script>
$(function(){
$("#themes").selectmenu();
$("#themes").val("hot-sneaks");
$("#themes").selectmenu("refresh");
$('#themes').on('selectmenuchange', function() {
var theme=$(this).val();
var href="jquery/themes/" + theme + "/jquery-ui.min.css";
$("#theme").attr("href", href);
});
});
</script>
<!-- 頁嵌面板 -->
<div id="tabs">
<ul>
<li><a href="#tabs-1">HTML 表格</a></li>
<li><a href="#tabs-2">Javascript 陣列</a></li>
<li><a href="#tabs-3">Javascript 陣列 (自適應)</a></li>
</ul>
<div id="tabs-1">
<table id="scores1">
<thead>
<tr>
<th>姓名</th>
<th>國文</th>
<th>英文</th>
<th>數學</th>
<th>物理</th>
<th>化學</th>
<th>歷史</th>
<th>地理</th>
</tr>
</thead>
<tbody>
<tr>
<td>王小二</td>
<td>56</td>
<td>78</td>
<td>88</td>
<td>45</td>
<td>89</td>
<td>65</td>
<td>73</td>
</tr>
<tr>
<td>李大明</td>
<td>86</td>
<td>93</td>
<td>79</td>
<td>85</td>
<td>90</td>
<td>87</td>
<td>75</td>
</tr>
<tr>
<td>張阿花</td>
<td>100</td>
<td>98</td>
<td>75</td>
<td>95</td>
<td>89</td>
<td>100</td>
<td>95</td>
</tr>
</tbody>
</table>
</div>
<div id="tabs-2">
<table id="scores2"></table>
</div>
<div id="tabs-3">
<div class="container table-responsive">
<table id="scores3"></table>
</div>
</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
$("#scores1" ).DataTable();
var columns=[{title: '姓名'},
{title: '國文'},
{title: '英文'},
{title: '數學'},
{title: '物理'},
{title: '化學'},
{title: '歷史'},
{title: '地理'}
];
var data=[['王小二', '56', '78', '88', '45', '89', '65', '73'],
['李大明', '86', '93', '79', '85', '90', '87', '75'],
['張阿花', '100', '98', '75', '95', '89', '100', '95']];
$("#scores2" ).DataTable({
data: data,
columns: columns,
autoWidth: true
});
$("#scores3" ).DataTable({
data: data,
columns: columns
});
});
</script>
</body>
</html>
由於 DataTables 與 jQuery UI 以及 Bootstrap 這兩個函式庫在 UI 上的黏合度非常高, 所以下載時需選定風格與版本 :
# https://datatables.net/download/
首先選擇樣式框架, 此處選 jQuery UI :
其次選擇函式庫, 由於 jQuery UI 最新版 v1.12.1 搭配 jQuery v1.12.4, 因此點選 jQuery 1 :
最後點選 Minified 與 Concatenate 後下載 zip 檔 :
將 zip 檔解壓縮後會產生一個 DataTables 目錄 :
將裡面的 datatables.js 與 datatables.css 這兩個檔案複製到專案目錄的 jquery 子目錄下 :
這樣就可以使用 DataTables 來呈現可排序的動態表格了, 網頁應用程式也要加上 DataTables 的程式與樣式, 將上一篇中的範例 1 修改為如下 :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<script src="bootstrap/bootstrap.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<link href="bootstrap/bootstrap.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#tabs-1">tab1</a></li>
<li><a href="#tabs-2">tab2</a></li>
<li><a href="#tabs-3">tab3</a></li>
</ul>
<div id="tabs-1">tab1</div>
<div id="tabs-2">tab2</div>
<div id="tabs-3">tab3</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
});
</script>
</body>
</html>
高亮度者為新增加的部分. DataTables 的教學文件與範例參考 :
# https://datatables.net/manual
# https://datatables.net/examples/index
DataTables 的資料來源有三種 :
- HTML 表格 (本地)
- Javascript 陣列 (本地)
- Ajax 取得 (遠端)
# https://datatables.net/examples/data_sources/dom.html (HTML 表格)
# https://datatables.net/examples/data_sources/js_array.html (JSON 物件)
如果資料是放在 HTML 表格中, 則在取得 table 元素的 jQuery 物件後直接呼叫 DataTable() 函數即可產生動態表格 :
$("#mytable").DataTable();
注意, 函數名稱是單數的 DataTable(), 不是 DataTables().
如果資料是放在 Javascript 陣列中, 則必須在呼叫 DataTable() 函數時傳入一個包含 data 與 columns 屬性的物件, data 的值為代表資料的二維陣列; 而 columns 則是代表表格欄位名稱的一維陣列 (具有 title 屬性物件), 例如 :
var dataset=[[row1], [row2], [row3], .... ];
var column_names=[{title: '欄1'}, {title: '欄2'}, {title: '欄3'}, ...];
$("#scores" ).DataTable({data: dataset,
columns: column_names
});
下面範例中, 頁籤 1 資料來源是 HTML 表格, 頁籤 2 與 3 資料來源是 Javascript 陣列, 但頁籤 3 是在 table 元件外加一層 div 容器, 套用 Bootstrap 的 table-responsive 自適應樣式, 這樣當表格資料長寬超過 tabs 時就會出現卷軸 :
範例 5 : DataTables表格
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<script src="bootstrap/bootstrap.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<link href="bootstrap/bootstrap.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#tabs-1">HTML 表格</a></li>
<li><a href="#tabs-2">Javascript 陣列</a></li>
<li><a href="#tabs-3">Javascript 陣列 (自適應)</a></li>
</ul>
<div id="tabs-1">
<table id="scores1">
<thead>
<tr>
<th>姓名</th>
<th>國文</th>
<th>英文</th>
<th>數學</th>
<th>物理</th>
<th>化學</th>
<th>歷史</th>
<th>地理</th>
</tr>
</thead>
<tbody>
<tr>
<td>王小二</td>
<td>56</td>
<td>78</td>
<td>88</td>
<td>45</td>
<td>89</td>
<td>65</td>
<td>73</td>
</tr>
<tr>
<td>李大明</td>
<td>86</td>
<td>93</td>
<td>79</td>
<td>85</td>
<td>90</td>
<td>87</td>
<td>75</td>
</tr>
<tr>
<td>張阿花</td>
<td>100</td>
<td>98</td>
<td>75</td>
<td>95</td>
<td>89</td>
<td>100</td>
<td>95</td>
</tr>
</tbody>
</table>
</div>
<div id="tabs-2">
<table id="scores2"></table>
</div>
<div id="tabs-3">
<div class="container table-responsive">
<table id="scores3"></table>
</div>
</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
$("#scores1" ).DataTable();
var columns=[{title: '姓名'},
{title: '國文'},
{title: '英文'},
{title: '數學'},
{title: '物理'},
{title: '化學'},
{title: '歷史'},
{title: '地理'}
];
var data=[['王小二', '56', '78', '88', '45', '89', '65', '73'],
['李大明', '86', '93', '79', '85', '90', '87', '75'],
['張阿花', '100', '98', '75', '95', '89', '100', '95']];
$("#scores2" ).DataTable({
data: data,
columns: columns,
autoWidth: true
});
$("#scores3" ).DataTable({
data: data,
columns: columns
});
});
</script>
</body>
</html>
結果如下 :
DataTable() 函數還可以傳入更多選項物件進行表格設定, 參考 :
# https://datatables.net/reference/option/
2020-08-19 補充 :
由於 Bootstrap 會干擾 jQuery UI 的主題佈景樣式, 所以決定拿掉 Bootstrap, 單純使用 jQuery UI 與 DataTables 外掛, 將範例 5 刪除 Bootstrap 並添加主題佈景選擇器後結果如下 :
範例 5-1 : 刪除 Bootstrap 並加入主題佈景選擇器之 DataTables表格
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Single Page Application</title>
<script src="jquery/jquery.js"></script>
<script src="jquery/jquery-ui.js"></script>
<script src="jquery/datatables.js"></script>
<link id="theme" href="jquery/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<link href="jquery/datatables.css" rel="stylesheet">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
font-size:10px;
}
</style>
</head>
<body>
<!-- 主題佈景選擇器 -->
<select id="themes">
<option value="base">base</option>
<option value="black-tie">black-tie</option>
<option value="blitzer">blitzer</option>
<option value="cupertino">cupertino</option>
<option value="dark-hive">dark-hive</option>
<option value="dot-luv">dot-luv</option>
<option value="eggplant">eggplant</option>
<option value="excite-bike">excite-bike</option>
<option value="flick">flick</option>
<option value="hot-sneaks">hot-sneaks</option>
<option value="humanity">humanity</option>
<option value="le-frog">le-frog</option>
<option value="mint-choc">mint-choc</option>
<option value="overcast">overcast</option>
<option value="pepper-grinder">pepper-grinder</option>
<option value="redmond">redmond</option>
<option value="smoothness">smoothness</option>
<option value="south-street">south-street</option>
<option value="start">start</option>
<option value="sunny">sunny</option>
<option value="swanky-purse">swanky-purse</option>
<option value="trontastic">trontastic</option>
<option value="ui-darkness">ui-darkness</option>
<option value="ui-lightness">ui-lightness</option>
<option value="vader">vader</option>
</select>
<script>
$(function(){
$("#themes").selectmenu();
$("#themes").val("hot-sneaks");
$("#themes").selectmenu("refresh");
$('#themes').on('selectmenuchange', function() {
var theme=$(this).val();
var href="jquery/themes/" + theme + "/jquery-ui.min.css";
$("#theme").attr("href", href);
});
});
</script>
<!-- 頁嵌面板 -->
<div id="tabs">
<ul>
<li><a href="#tabs-1">HTML 表格</a></li>
<li><a href="#tabs-2">Javascript 陣列</a></li>
<li><a href="#tabs-3">Javascript 陣列 (自適應)</a></li>
</ul>
<div id="tabs-1">
<table id="scores1">
<thead>
<tr>
<th>姓名</th>
<th>國文</th>
<th>英文</th>
<th>數學</th>
<th>物理</th>
<th>化學</th>
<th>歷史</th>
<th>地理</th>
</tr>
</thead>
<tbody>
<tr>
<td>王小二</td>
<td>56</td>
<td>78</td>
<td>88</td>
<td>45</td>
<td>89</td>
<td>65</td>
<td>73</td>
</tr>
<tr>
<td>李大明</td>
<td>86</td>
<td>93</td>
<td>79</td>
<td>85</td>
<td>90</td>
<td>87</td>
<td>75</td>
</tr>
<tr>
<td>張阿花</td>
<td>100</td>
<td>98</td>
<td>75</td>
<td>95</td>
<td>89</td>
<td>100</td>
<td>95</td>
</tr>
</tbody>
</table>
</div>
<div id="tabs-2">
<table id="scores2"></table>
</div>
<div id="tabs-3">
<div class="container table-responsive">
<table id="scores3"></table>
</div>
</div>
</div>
<script>
$(function(){
$("#tabs" ).tabs();
$("#scores1" ).DataTable();
var columns=[{title: '姓名'},
{title: '國文'},
{title: '英文'},
{title: '數學'},
{title: '物理'},
{title: '化學'},
{title: '歷史'},
{title: '地理'}
];
var data=[['王小二', '56', '78', '88', '45', '89', '65', '73'],
['李大明', '86', '93', '79', '85', '90', '87', '75'],
['張阿花', '100', '98', '75', '95', '89', '100', '95']];
$("#scores2" ).DataTable({
data: data,
columns: columns,
autoWidth: true
});
$("#scores3" ).DataTable({
data: data,
columns: columns
});
});
</script>
</body>
</html>
沒有留言 :
張貼留言