jQuery 的插件 dataTables 是一個優秀的表格插件,提供了針對表格的排序、浏覽器分頁、伺服器分頁、篩選、格式化等功能。dataTables 的網站上也提供了大量的示範和詳細的文檔進行說明,為了友善學習使用,這裡一步一步進行說明。
首先,需要到 dataTables 的網站 http://www.datatables.net/ 下載下傳這個腳本庫,
目前最新的版本是 1.8.2,下載下傳的壓縮包中使用的 jQuery 是 1.4.4 。現在 jQuery1.5.1 已經釋出,是以,這裡使用最新的 jQuery 1.5.1 。
然後,在網頁中先加入 jQuery 的引用,然後,加入 dataTables 的引用。
引入CSS檔案和JS檔案
--------------------------------------------------------------------------
<style type="text/css" title="currentStyle">
@import "DataTables-1.8.1/media/css/demo_page.css";
@import "DataTables-1.8.1/media/css/demo_table.css";
@import "DataTables-1.8.1/media/css/demo_table_jui.css";
</style>
<script type="text/javascript" language="javascript" src="DataTables-1.8.1/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="DataTables-1.8.1/media/js/jquery.dataTables.js"></script>
--------------------------------------------------------------------------
-----------最簡單的方式:
$(document).ready(function() {
$("#example").dataTable();
});
----------也可以自己定義各屬性:
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$("#example").dataTable({
// "bPaginate": true, //開關,是否顯示分頁器
// "bInfo": true, //開關,是否顯示表格的一些資訊
// "bFilter": true, //開關,是否啟用用戶端過濾器
// "sDom": "<>lfrtip<>",
// "bAutoWith": false,
// "bDeferRender": false,
// "bJQueryUI": false, //開關,是否啟用JQueryUI風格
// "bLengthChange": true, //開關,是否顯示每頁大小的下拉框
// "bProcessing": true,
// "bScrollInfinite": false,
// "sScrollY": "800px", //是否開啟垂直滾動,以及指定滾動區域大小,可設值:'disabled','2000px'
// "bSort": true, //開關,是否啟用各列具有按列排序的功能
// "bSortClasses": true,
// "bStateSave": false, //開關,是否打開用戶端狀态記錄功能。這個資料是記錄在cookies中的,打開了這個記錄後,即使重新整理一次頁面,或重新打開浏覽器,之前的狀态都是儲存下來的- ------當值為true時aoColumnDefs不能隐藏列
// "sScrollX": "50%", //是否開啟水準滾動,以及指定滾動區域大小,可設值:'disabled','2000%'
// "aaSorting": [[0, "asc"]],
// "aoColumnDefs": [{ "bVisible": false, "aTargets": [0]}]//隐藏列
// "sDom": '<"H"if>t<"F"if>',
"bAutoWidth": false, //自适應寬度
"aaSorting": [[1, "asc"]],
"sPaginationType": "full_numbers",
"oLanguage": {
"sProcessing": "正在加載中......",
"sLengthMenu": "每頁顯示 _MENU_ 條記錄",
"sZeroRecords": "對不起,查詢不到相關資料!",
"sEmptyTable": "表中無資料存在!",
"sInfo": "目前顯示 _START_ 到 _END_ 條,共 _TOTAL_ 條記錄",
"sInfoFiltered": "資料表中共為 _MAX_ 條記錄",
"sSearch": "搜尋",
"oPaginate": {
"sFirst": "首頁",
"sPrevious": "上一頁",
"sNext": "下一頁",
"sLast": "末頁"
}
} //多語言配置
});
});
</script>
----------------頁面:
對于 dataTables 來說,表格必須通過 thead 和 tbody 進行說明,如下所示,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果沒有 thead 将會報錯。
最為簡單的使用方式,就是零配置的方式。
|
|
});
以下是在進行dataTable綁定處理時候可以附加的參數:
屬性名稱 | 取值範圍 | 解釋 |
bAutoWidth | true or false, default true | 是否自動計算表格各列寬度 |
bDeferRender | true or false, default false | 用于渲染的一個參數 |
bFilter | true or false, default true | 開關,是否啟用用戶端過濾功能 |
bInfo | true or false, default true | 開關,是否顯示表格的一些資訊 |
bJQueryUI | true or false, default false | 是否使用jquery ui themeroller的風格 |
bLengthChange | true or false, default true | 開關,是否顯示一個每頁長度的選擇條(需要分頁器支援) |
bPaginate | true or false, default true | 開關,是否顯示(使用)分頁器 |
bProcessing | true or false, defualt false | 開關,以指定當正在處理資料的時候,是否顯示“正在處理”這個提示資訊 |
bScrollInfinite | true or false, default false | 開關,以指定是否無限滾動(與sScrollY配合使用),在大資料量的時候很有用。當這個标志為true的時候,分頁器就預設關閉 |
bSort | true or false, default true | 開關,是否讓各列具有按列排序功能 |
bSortClasses | true or false, default true | 開關,指定當目前列在排序時,是否增加classes 'sorting_1', 'sorting_2' and 'sorting_3',打開後,在處理大資料時,性能有所損失 |
bStateSave | true or false, default false | 開關,是否打開用戶端狀态記錄功能。這個資料是記錄在cookies中的,打開了這個記錄後,即使重新整理一次頁面,或重新打開浏覽器,之前的狀态都是儲存下來的 |
sScrollX | 'disabled' or '100%' 類似的字元串 | 是否開啟水準滾動,以及指定滾動區域大小 |
sScrollY | 'disabled' or '200px' 類似的字元串 | 是否開啟垂直滾動,以及指定滾動區域大小 |
-- | -- | -- |
選項 | ||
aaSorting | array array[int,string], 如[], [[0,'asc'], [0,'desc']] | 指定按多列資料排序的依據 |
aaSortingFixed | 同上 | 同上。唯一不同點是不能被使用者的自定義配置沖突 |
aLengthMenu | default [10, 25, 50, 100],可以為一維數組,也可為二維數組,比如:[[10, 25, 50, -1], [10, 25, 50, "All"]] | 這個為選擇每頁的條目數,當使用一個二維數組時,二維層面隻能有兩個元素,第一個為顯示每頁條目數的選項,第二個是關于這些選項的解釋 |
aoSearchCols | default null, 類似:[null, {"sSearch": "My filter"}, null,{"sSearch": "^[0-9]", "bEscapeRegex": false}] | 給每個列單獨定義其初始化搜尋清單特性(這一塊還沒搞懂) |
asStripClasses | default ['odd', 'even'], 比如['strip1', 'strip2', 'strip3'] | 指定要被應用到各行的class風格,會自動循環 |
bDestroy | true or false, default false | 用于當要在同一個元素上執行新的dataTable綁定時,将之前的那個資料對象清除掉,換以新的對象設定 |
bRetrieve | true or false, default false | 用于指明當執行dataTable綁定時,是否傳回DataTable對象 |
bScrollCollapse | true or false, default false | 指定适當的時候縮起滾動視圖 |
bSortCellsTop | true or false, default false | (未知的東東) |
iCookieDuration | 整數,預設7200,機關為秒 | 指定用于存儲用戶端資訊到cookie中的時間長度,超過這個時間後,自動過期 |
iDeferLoading | 整數,預設為null | 延遲加載,它的參數為要加載條目的數目,通常與bServerSide,sAjaxSource等配合使用 |
iDisplayLength | 整數,預設為10 | 用于指定一屏顯示的條數,需開啟分頁器 |
iDisplayStart | 整數,預設為0 | 用于指定從哪一條資料開始顯示到表格中去 |
iScrollLoadGap | 整數,預設為100 | 用于指定當DataTable設定為滾動時,最多可以一屏顯示多少條資料 |
oSearch | 預設{ "sSearch": "", "bRegex": false, "bSmart": true } | 又是初始時指定搜尋參數相關的,有點複雜,沒搞懂目前 |
sAjaxDataProp | 字元串,default 'aaData' | 指定當從服務端擷取表格資料時,資料項使用的名字 |
sAjaxSource | URL字元串,default null | 指定要從哪個URL擷取資料 |
sCookiePrefix | 字元串,default 'SpryMedia_DataTables_' | 當打開狀态存儲特性後,用于指定存儲在cookies中的字元串的字首名字 |
sDom | default lfrtip (when bJQueryUI is false) or <"H"lfr>t<"F"ip> (when bJQueryUI is true) | 這是用于定義DataTable布局的一個強大的屬性,另開專門文檔來補充說明吧 |
sPaginationType | 'full_numbers' or 'two_button', default 'two_button' | 用于指定分頁器風格 |
sScrollXInner | string default 'disabled' | 又是水準滾動相關的,沒搞懂啥意思 |
DataTable支援如下回調函數
回調函數名稱 | 參數 | 傳回值 | 預設 | 功能 |
fnCookieCallback | 1.string: Name of the cookie defined by DataTables 2.object: Data to be stored in the cookie 3.string: Cookie expires string 4.string: Path of the cookie to set | string: cookie formatted string (which should be encoded by using encodeURIComponent()) | null | 當每次cookies改變時,會觸發這個函數調用 |
fnDrawCallback | 無 | 無 | 無 | 在每次table被draw完後調用,至于做什麼就看着辦吧 |
fnFooterCallback | 1.node : "TR" element for the footer 2.array array strings : Full table data (as derived from the original HTML) 3.int : Index for the current display starting point in the display array< 4.int : Index for the current display ending point in the display array 5.array int : Index array to translate the visual position to the full data array | 無 | 無 | 用于在每次重畫的時候修改表格的腳部 |
fnFormatNumber | 1.int : number to be formatted | String : formatted string for DataTables to show the number | 有預設的 | 用于在大數字上,自動加入一些逗号,分隔開 |
fnHeaderCallback | 1.node : "TR" element for the header 2.array array strings : Full table data (as derived from the original HTML) 3.int : Index for the current display starting point in the display array 4.int : Index for the current display ending point in the display array 5.array int : Index array to translate the visual position to the full data array | 無 | 無 | 用于在每次draw發生時,修改table的header |
fnInfoCallback | 1.object: DataTables settings object 2.int: Starting position in data for the draw 3.int: End position in data for the draw 4.int: Total number of rows in the table (regardless of filtering) 5.int: Total number of rows in the data set, after filtering 6.string: The string that DataTables has formatted using it's own rules | string: The string to be displayed in the information element. | 無 | 用于傳達table資訊 |
fnInitComplete | 1.object:oSettings - DataTables settings object | 無 | 無 | 表格初始化完成後調用 |
fnPreDrawCallback | 1.object:oSettings - DataTables settings object | Boolean | 無 | 用于在開始繪制之前調用,傳回false的話,會阻止draw事件發生;傳回其它值,draw可以順利執行 |
fnRowCallback | 1.node : "TR" element for the current row 2.array strings : Raw data array for this row (as derived from the original HTML) 3.int : The display index for the current table draw 4.int : The index of the data in the full list of rows (after filtering) | node : "TR" element for the current row | 無 | 當建立了行,但還未繪制到螢幕上的時候調用,通常用于改變行的class風格 |
fnServerData | 1.string: HTTP source to obtain the data from (i.e. sAjaxSource) 2.array objects: A key/value pair object containing the data to send to the server 3.function: Function to be called on completion of the data get process that will draw the data on the page. | void | $.getJSON | 用于替換預設發到服務端的請求操作 |
fnStateLoadCallback | 1.object:oSettings - DataTables settings object 2.object:oData - Object containing information retrieved from the state saving cookie which should be restored. For the exact properties please refer to the DataTables code. | Boolean - false if the state should not be loaded, true otherwise | 無 | 在cookies中的資料被加載前執行,可以友善地修改這些資料 |
fnStateSaveCallback | 1.object:oSettings - DataTables settings object 2.String:sValue - a JSON string (without the final closing brace) which should be stored in the state saving cookie. | String - the full string that should be used to save the state | 無 | 在狀态資料被存儲到cookies前執行,可以友善地做一些預操作 |
表格的效果
注意,紅框表示了四個預設的設定效果,分别用來選擇每頁的行數,表格的過濾器,表格的資訊和換頁。
此時,使用了幾個預設的參數設定。在 dataTables 中,參數名稱的字首用來說明參數的資料類型,很明顯,b 表示布爾類型,i 表示整數類型,s 表示字元串類型。
- bPaginate: 是否分頁,預設為 true,分頁
- iDisplayLength : 每頁的行數,每頁預設數量:10
- sPaginationType: 分頁樣式,支援兩種内置方式,two_button 和 full_numbers, 預設使用 two_button。
- bLengthChange : 是否允許使用者通過一個下拉清單來選擇分頁後每頁的行數。行數為 10,25,50,100。這個設定需要 bPaginate 支援。預設為 true。
- bFilter: 啟用或禁止資料過濾,預設為 true。 注意,如果使用過濾功能,但是希望關閉預設的過濾輸入框,應使用 sDom
- bInfo: 允許或者禁止表資訊的顯示,預設為 true,顯示資訊。
我們也可以通過傳遞一個初始化參數對象來改變這些設定。例如,下面的例子将每頁的行數設定為 20 行。
|
|
|
|
|
|
|