使用jQuery開發datatable分頁表格插件


   

  當系統數據量很大時,前端的分頁、異步獲取方式就成了較好的解決方案。一直以來,我都希望使用自己開發的 jquery 插件做系統。

  現在,學習了 jquery 插件開發之后,漸漸地也自己去嘗試着開發一些簡單的插件,之前已經開發了手風琴、選項卡,今天和大家介紹一下這個 datatable 分頁表格插件。

  我們先講解使用,再分析插件的實現方式。

  手冊地址:http://5ijy01.duapp.com/jq-ui/index.html?tab=tab12

 

1、引入jquery庫和插件庫、css文件

首先需要引入 jquery 庫,因為我們的 datatable 插件依賴另外一個分頁插件,所有需要先把這個分頁插件庫引入進來,最后再引入 datatable 插件的 js 和 css 文件

1 <script type="text/javascript" src="js/jquery/jquery-1.7.2.min.js"></script>
2 
3 <script type="text/javascript" src="js/pagination.js"></script>
4 <link rel="stylesheet" href="css/blue/pagination.css"/>
5 
6 <script type="text/javascript" src="js/datatable.js"></script>
7 <link rel="stylesheet" href="css/blue/datatable.css"/>

 

2、插件使用

下面我們就介紹下插件如何使用。

首先,我們需要寫一個 table 標簽,其實,最主要的代碼就只有第 5 行的 table 標簽,前面的幾個 button 是為了看插件交互的。

1 <button class="default-button" onclick="update();">修 改</button>
2 <button class="default-button" onclick="del();">刪 除</button>
3 <button class="default-button" onclick="reload();">刷 新</button>
4 
5 <table id="first-datatable"></table>

 

然后,我們需要寫一段 script 腳本來初始化 datatable 組件,以及加載首頁數據。

 1 $("#first-datatable").datatable({
 2     width: "1000",
 3     height: "auto",
 4     columns: [
 5         { field: "id", columnName: "編號", css: { "text-align": "center" } },
 6         { field: "username", columnName: "用戶名" },
 7         { field: "age", columnName: "年齡" },
 8         { field: "phone", columnName: "聯系電話", css: { "text-align": "center" } },
 9         { field: "email", columnName: "郵箱" },
10         { field: "description", columnName: "自我介紹" }
11     ],
12     url: "/jq-ui/ajax/admin_json.jsp",
13     pageNum: 1,            // 顯示第幾頁數據,默認1
14     pageSize: 15,        // 每頁數據數量,默認10
15     pagination: true,    // 是否啟用分頁組件,默認啟用
16     showCheckbox: true
17 });

我們簡單介紹一下參數:

  width:  是包裹 table 標簽的 div 的寬度,您可以不設置這個參數的值,默認使用的 100% 即父元素的寬度

  height:     是包裹 table 標簽的 div 的高度,默認 auto

  columns:  是一個 object[] 對象,定義 table 的列信息,包括列名、字段的 key、css樣式

  url:           獲取異步數據的遠程地址

  pageNum:初始化時顯示第幾頁數據

  pageSize:每頁顯示多少數據

  pagination:是否啟用分頁組件

  showCheckbox:是否顯示行首的復選框,這個參數在需要進行數據選擇時使用

 

后台代碼就不在這個介紹了,如果需要可以去下載插件項目代碼。后台返回一個 json 數據,應該包括最大頁數、數據集合信息,如下:

  

 

現在,可以看到插件的效果了:

  

 

 3、插件的實現方式和核心函數

插件初始化時首先生成 thead 和 表頭,然后在 table 外面包裹一個 div , 然后通過參數配置的 url 參數獲取數據,加載到 table 的 tbody 中。在這個過程中,會通過參數判斷是否顯示行首的復選框和分頁組件。分頁插件我們不做重點介紹,datatable 插件中的代碼如下:

 1 if(options["pagination"]) {
 2     // 先把之前的分頁組件刪除
 3     $datatable.parent().find(".pagination").remove();
 4     // 定義一個div用於顯示分頁組件
 5     var $pagination = $("<div></div>").css("margin-top", "10px");
 6     // 初始化分頁組件
 7     $pagination.pagination({
 8         pageNum: options["pageNum"],
 9         size: options["pageSize"],
10         total: data["totalPage"],
11         click: function(curr, s) {
12             options["pageNum"] = curr;
13             $.data(this, "datatable", options);
14             loadData($datatable);
15             return data["totalPage"];
16         }
17     });
18     // 把分頁組件追加到datatable組件
19     $datatable.parent().append($pagination);
20 }

 

為了方便用戶獲取數據、刷新表格,插件提供了兩個函數:

  

 

4、刷新、獲取

下面我們簡單介紹下如何使用 reload 和 getSelectRows 函數

刪除按鈕的事件函數:

 1 /*
 2  * 刪除函數
 3  */
 4 function del(tid) {
 5     var rows = $("#" + tid).datatable("getSelectRows");
 6     if(rows.length < 1) {
 7         alert("請至少選擇一條數據");
 8         return;
 9     }
10     var ids = new Array();
11     for(var i = 0; i < rows.length; i++) {
12         var id = rows[i]["id"];
13         ids.push(id);
14     }
15     console.log(ids);
16     $.ajax({
17         type: "post",
18         dataType: "json",
19         data: { "ids": ids},
20         traditional: true,
21         url: "/jq-ui/ajax/admin_del.jsp",
22         success: function(data) {
23             if(data["retCode"] == '0') {
24                 alert("刪除成功");
25                 $("#" + tid).datatable("reload");
26             }
27         }
28     });
29 }

 

更新按鈕的事件函數類似,就不再重復介紹了。

 

刷新按鈕的事件函數:

1 /*
2  * 點擊"刷新"后調用datatable的reload函數重新加載數據
3  */
4 function reload(id) {
5     $("#" + id).datatable("reload");
6 }

 

5、項目地址

datatable.js http://5ijy01.duapp.com/jq-ui/js/datatable.js

datatable.css http://5ijy01.duapp.com/jq-ui/css/blue/datatable.css

演示項目在 http://5ijy01.duapp.com/jq-ui/index.html

github項目在 https://github.com/xuguofeng/jq-ui

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM