自己做一個table外掛 (一)Ajax獲取資料後動態生成table
今天我給大家帶來一個簡單的JQ
外掛,Ajax
獲取資料後動態生成table
。當然,有這種功能的外掛有很多。著名的有DataTable、JqGrid
……它們雖然功能豐富,成熟,拿來做二次開發是一個不錯的選擇。但是,我仍然自己寫了一個外掛,原因很簡單,它們太龐大了,它的百分之九十的功能我都用不上。
下面是效果展示:我是用的AmazeUI
做的當然,這都不重要,你只需要一個有Table
標籤的Html
就可以了。
第一步:寫一段html
<table style="border-spacing: 50px 20px;" id="table">
<thead>
<tr>
<th>使用者名稱</th>
<th>角色</th>
<th>狀態</th>
<th>是否啟用</th>
<th>建立時間</th>
<th>最後登入</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
效果是這樣的:
第二步:新建一個js檔案,因為是要作為一個外掛的存在,所以要這麼寫。
$.fn.grid = function(options) {
var $tbody = $(this).find("tbody");
var colums = options.colums;
var url = options.url;
var content = [];
//ajax獲取資料來源後存入content資料中。
$.ajax({
type: "get",
url: url,
dataType: "json",
async: false,
success: function(data) {
content = data;
}
});
for(var c = 0; c < content.length; c++) {
//遍歷所有列
var cols = [];
$.each(colums, function(key, value) {
//遍歷json資料
$.each(content[c], function(key2, value2) {
if(key2 == value.Index) {
cols.push(value2);
}
});
});
var html="<tr>";
$.each(cols,function(k,v){
html += "<td>"+v+"</td>"
});
html += "</tr>";
$tbody.append(html)
}
}
簡單解釋一下:
$.fn
和 jQuery.prototype
一個意思。這是Jquery
外掛的寫法,意思就是給jQuery
物件增加一個屬性,這個屬性就是一個函式,我們就可以通過$("XX選擇器").grid(options)
來呼叫這個方法。
options.colums
這個引數的意思就是這個列的名稱。它是一個陣列,呼叫處要將這些列的名稱傳進來,然後把資料來源中的名字作對比;如果相同,那麼就儲存這個值,之後將他們拼接成html程式碼,附加到tbody
中,這麼表述也不是很清楚,見諒,等會看看程式碼就明白了。
第三步:
在Html程式碼中引入這個js檔案,然後呼叫(不要忘了先引入Jquery
檔案,我對Jquery
比較熟,用jq
寫程式碼量也比較少,所以我就用jq來寫了)。
第四步:
在html
中呼叫這個方法,現在是不是明白colums
這個引數的意義了。
<script>
$(function() {
var options = {
url: "User.json",//json檔案或者資料庫查詢後的地址
colums: [{
"Index": "name",
"Name": "使用者名稱"
}, {
"Index": "rolename",
"Name": "角色"
}, {
"Index": "status",
"Name": "狀態"
}, {
"Index": "isActive",
"Name": "是否啟用"
}, {
"Index": "createTime",
"Name": "建立時間"
}, {
"Index": "lastLogin",
"Name": "最後登入"
}]
}
$("#table").grid(options);
});
</script>
下面寫出User.json
的內容 (模擬資料庫查詢後返回的資料)
[
{
"name": "SheyPang",
"rolename": "管理員",
"status": "1",
"isActive": "1",
"createTime": "2018-01-01",
"lastLogin": "2018-02-02"
}, {
"name": "PPPPPPP",
"rolename": "管理員",
"status": "1",
"isActive": "1",
"createTime": "2018-01-01",
"lastLogin": "2018-02-02"
}, {
"name": "AAAAAA",
"rolename": "管理員",
"status": "1",
"isActive": "1",
"createTime": "2017-01-01",
"lastLogin": "2017-02-02"
}, {
"name": "VVVVVVVV",
"rolename": "管理員",
"status": "1",
"isActive": "1",
"createTime": "2018-06-04",
"lastLogin": "2018-02-02"
}
]
效果如下
總結:這個段程式碼的難點是資料名稱的對比,需要有一點點演算法的功力,要對js物件的遍歷(key-value
)這種的稍微有點熟悉。演算法應該還有優化的空間。
作為一個外掛當然這只是一小部分;但是是比較重要的部分,還有其他的功能需要實現。比如,分頁、搜尋、排序、點選row的觸發的事件。之後我會繼續寫文章的。
相關文章
- js 獲取 table 中的每一個tdJS
- datatables 獲取 pageLength 和 pageStart,重新獲取table資料
- vue 商品sku新增,笛卡爾演算法,商品新增。動態生成table,table新增值後 再生成的table 不改變table之前輸入的值Vue演算法
- 自己寫一個Babel外掛Babel
- 怎麼在ajax外邊使用ajax裡面在後端獲取的資料後端
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- vue+element-ui 修改動態生成的表格(el-table)中的資料VueUI
- created mounted 動態獲取資料渲染後,獲取DOM問題
- element table只計算最後一列資料總和
- JavaScript動態建立table表格JavaScript
- 自己寫一個vue的loading外掛Vue
- JavaScript獲取table表格指定列的值JavaScript
- datatables使用ajax獲取資料
- Bootstrap Blazor 元件介紹 Table (一)自動生成列功能介紹bootBlazor元件
- webpack loader—自己寫一個按需載入外掛Web
- JavaScript動態為table表格新增行JavaScript
- vue-split-table【表格合併和編輯外掛】Vue
- JavaScript獲取table表格行與列的數量JavaScript
- Oracle中獲取TABLE的DDL語句的方法Oracle
- IDEA外掛Apifox,一鍵自動生成介面文件!IdeaAPI
- 做一個可以聊天的 Visual Studio Code 外掛
- Vssue - 又一個用 Issue 給靜態頁面做評論的外掛
- 編寫自己的Babel外掛(一)Babel
- 資料庫 sqlite3_get_table,sqlite3_free_table資料庫SQLite
- [20181203]drop table後如何獲得表結構.txt
- 自定義一個gradle外掛動態修改jar包Class檔案GradleJAR
- WebMagic抓取 table分頁資料, table分頁時,URL不變Web
- AJAX 獲取伺服器響應資料伺服器
- 【Azure Power BI】Power BI獲取SharePoint List列表後,如何展開List/Table中的欄位,以及使用逗號拼接為一個字串字串
- jquery如何獲取第一個或最後一個子元素?jQuery
- mysql主從恢復資料一致性(pt工具-t-table-checksum和pt-table-sync)MySql
- PHP外掛系統的實現(二):獲取全部外掛資訊PHP
- 實現一個可無限摺疊的table
- AntDesign - Vue Table元件 實現動態表格、表頭分組的功能(方式一)Vue元件
- PHP獲取陣列最後一個值PHP陣列
- JavaScript獲取陣列最後一個元素JavaScript陣列
- el-table 點選按鈕 表格自動增加一行,同時新增的行input 自動獲取焦點
- create table,show tables,describe table,DROP TABLE,ALTER TABLE ,怎麼使用?