本篇要延續DataTables介紹,如何引用拓展包呈現響應式版本
好心建議要先看:
▼範例使用Bootstrap 4 styling
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.bootstrap4.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.9/js/responsive.bootstrap4.min.js"></script>
▲若要有響應式版本,需再引入dataTables.responsive.min.js ...等
而樣式部分有多種可以選擇,例如:也可以套用Bootstrap model...等,
詳細可看 官網 > https://datatables.net/extensions/responsive/examples/
然後
跟著範例 https://datatables.net/extensions/responsive/examples/styling/bootstrap4.html
HTML
*classname dt-responsive 或 responsive
一定要加上去
<table id="tableAjax" class="table table-striped table-bordered dt-responsive nowrap" style="width:100%">
data.json內容(延續前篇)
{
"data": [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": "$3,120",
"start_date": "2011/04/25",
"office": "Edinburgh",
"extn": "5421"
},
{
"name": "A Winters",
"position": "Director",
"salary": "$5,300",
"start_date": "2011/07/25",
"office": "Edinburgh",
"extn": "8422"
},
.
.
.
//其他
]
}
JQ (延續前篇)
$('#tableAjax').DataTable({
"ajax": 'data.json', //抓api url
"columns": [
{ data: 'name',title: "姓名" },
{ data: 'position',
title: "職位" ,
render: function (data, type, row) {
return '<a href="" target="_blank">'+data+'</a>'
}
},
{ data: 'salary',title: "薪資" },
{ data: 'start_date',title: "開始工作日" },
{ data: 'office',title: "辦公室" },
{ data: 'extn',title: "分機" },
{ data: null ,title: "操作功能",
render: function (data, type, row) {
return '<button type="button" class="btn btn-warning btn-sm">編輯</button> ' +
'<button type="button" class="btn btn-danger btn-sm">刪除</button>'
} ,
},
],
"columnDefs":[
{
targets: [0],
width: "30%",
},
],
//設定語言區塊(language),
language: {
url: "https://cdn.datatables.net/plug-ins/1.11.3/i18n/zh_Hant.json"
}
});
就完成啦!
收工XD
別走!(演兩次)
▲有看到上面影片嗎?他會隨著螢幕寬度不夠後,自動刪減
今天假設我們縮小時要先保留最後一行"編輯"以及"分機",怎麼辦?
有三種操作模式來控制表中列的可見性:
值越小,顯示優先級越高
,未定義的優先級值的地方,它會自動將列的優先級設置為 10000,按照列的先後順序依次隱藏。詳細可看 >官網 https://datatables.net/reference/option/columns.responsivePriority
$('#tableAjax').DataTable({
responsive: true, // 預設為undefined
.
.
//其他同上參數
"columnDefs":[
{
targets: [6],
responsivePriority: 1,
},
{
targets: [5],
responsivePriority: 2,
},
],
.
.
//其他同上參數
});
data-priority
th的屬性定義(例如<th data-priority="1">First name</th>
)columns
: [{ responsivePriority: 6 },{ responsivePriority: 5 }....],上篇有提到與columnDefs效果一樣喔先看一下原圖,targets對應欄位
所以它就會從 4 > 3 > 2 > 1 > 5 > 6 > 0 依序隱藏至下方
另外
可以通過columns.className
選項來完成- 例如className: 'tablet desktop'
就能將欄位出現在平板電腦和桌面屏幕寬度上。
className | 寬度 (x) 範圍 |
---|---|
desktop | x > 1024 |
tablet-l | 768 < x <= 1024 |
tablet-p | 480 < x <= 768 |
mobile-l | 480 < x <= 768 |
mobile-p | x <= 320 |
*若要改預設可以透過responsive.breakpoints
修改
例如以boostrap Grid來說.col-md
是指 ≥ 768px
(平板以上....要走)
跟DataTable的tablet-l
會不一致,所以可以設置為
$('#pep004table').DataTable({
responsive: {
breakpoints: [
{ name: 'desktop', width: Infinity },
{ name: 'tablet-l', width: 1024 },
{ name: 'tablet-p', width: 767 },//原本是768~1024不含768
{ name: 'mobile-l', width: 480 },
{ name: 'mobile-p', width: 320 }
]
},
});
詳細可看 > 官網 https://datatables.net/extensions/responsive/classes
接下來我們就弄個範例
假設"職位"及"薪資"在平板以上要秀出來,但平板以下就要先縮起來
$('#tableAjax').DataTable({
responsive: {
breakpoints: [
{ name: 'desktop', width: Infinity },
{ name: 'tablet-l', width: 1024 },//原本是768~1024不含768
{ name: 'tablet-p', width: 767 },//
{ name: 'mobile-l', width: 480 },
{ name: 'mobile-p', width: 320 }
]
},
"ajax": 'data.json',
"columns": [
{ data: 'name', title: "姓名" },
{
data: 'position',
title: "職位",
render: function (data, type, row) {
return '<a href="" target="_blank">' + data + '</a>'
}, "className": "min-tablet-l"
}, // >=768px才可見
{ data: 'salary', title: "薪資", "className": "min-tablet-l" },// >=768px才可見
{ data: 'start_date', title: "開始工作日" },
{ data: 'office', title: "辦公室" },
{ data: 'extn', title: "分機" },
{
data: null, title: "操作功能",
render: function (data, type, row) {
return '<button type="button" class="btn btn-warning btn-sm">編輯</button> ' +
'<button type="button" class="btn btn-danger btn-sm">刪除</button>'
}
},
],
//語言區塊(language),
language: {
url: "https://cdn.datatables.net/plug-ins/1.11.3/i18n/zh_Hant.json"
}
});
這樣就完成啦!
那我們DataTables系列
就先到這啦!
其實有很多DataTables extensions及options設定,但可能要用到時再去查一下,基本上實務上可以用到的本系列相關文章
就都差不多傾囊相授哩~
若你對控制選項需要修改或有疑問也可以參考:
本系列相關文章
:
您好:
請問隱藏至下方的功能按鈕,還能去設定他的文字內容嗎? 比如說"編輯"要把它改成"更改"
您好,請問是文章中的這段嗎?
小姐姐您好,這玩意非常好用但也遇到讓我頭痛的事情
我的資料欄位有15欄
當使用 dt-responsive
時,我想讓某七個欄位 "必定" 成為摺疊欄位。
那表示另外八個欄位 "必定"顯示於當前畫面
所以我將8個欄位優先權設1,其他為預設10000。
並將8個欄位由col-12分割,控制在加總為12。
聽起來都沒什麼狀況,也部分
成功了.......
也就是我在資料內容不同時,會有並非上述的結果出現
有時....僅摺疊了兩了欄位,有時完全沒摺疊欄位,造成版面全部破滅~~
我找了一大堆方法都無法處理
似乎沒有一個功能是,強制某欄位必定要摺疊????
最後,因為我的站使用者大致為電腦類型...
於是我使用斷點功能....於寬度480以上,該class要摺疊,類似下方responsive: { breakpoints: [ { name: 'desktop', width: 480 } ] }
才勉強的完成了我要的結果
我只看到有延伸功能....是可以在產出表單後生出一個按鈕,此按鈕可選擇要摺疊的欄位。
或是僅能完全隱藏某些欄定欄位,但無法展開。
不知小姐姐是否知道相關設定?? 感謝