自己做一個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的觸發的事件。之後我會繼續寫文章的。
相關文章
- ajax動態生成table
- js 獲取 table 中的每一個tdJS
- js如何動態建立一個table表格JS
- 自己動手搞一個tip 外掛
- datatables 獲取 pageLength 和 pageStart,重新獲取table資料
- vue 商品sku新增,笛卡爾演算法,商品新增。動態生成table,table新增值後 再生成的table 不改變table之前輸入的值Vue演算法
- 建立幾個常用table展示方式外掛
- 自己寫一個Babel外掛Babel
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- 怎麼在ajax外邊使用ajax裡面在後端獲取的資料後端
- created mounted 動態獲取資料渲染後,獲取DOM問題
- vue+element-ui 修改動態生成的表格(el-table)中的資料VueUI
- 一次truncate table 後的資料恢復[轉帖]資料恢復
- element table只計算最後一列資料總和
- javascript動態建立table表格並新增資料程式碼JavaScript
- JavaScript 動態建立table表格JavaScript
- JavaScript動態建立table表格JavaScript
- Android Studio Plugin 外掛開發教程(三) —— 製作一個自動生成資料庫程式碼的外掛AndroidPlugin資料庫
- datatables使用ajax獲取資料
- 8000萬資料的Table(10g)新建一個index, 需要建立後分析一下嗎Index
- Bootstrap Blazor 元件介紹 Table (一)自動生成列功能介紹bootBlazor元件
- 比較兩個TABLE的資料是否完全一致
- 資料庫升級後‘PLAN_TABLE資料庫
- 自己寫一個vue的loading外掛Vue
- JavaScript獲取table表格指定列的值JavaScript
- 【移動資料】External Table 外部表
- jquery 動態給table賦值jQuery賦值
- jQuery對Table一個欄位排序jQuery排序
- javascript如何動態生成一個元素JavaScript
- webpack loader—自己寫一個按需載入外掛Web
- 編寫自己的Babel外掛(一)Babel
- 使用 JavaScript 獲取 table 行號和列號JavaScript
- dblink insert 與exp/imp一個table,匯入後的資料排序是怎樣的?排序
- JavaScript動態為table表格新增行JavaScript
- 動態建立table表格併為每一個td單元格註冊點選事件事件
- Vssue - 又一個用 Issue 給靜態頁面做評論的外掛
- 自己存檔:table的cssCSS
- truncate table 誤刪除資料後的恢復