簡單的表格json控制元件
由於最近做的專案一直有表格的形式展示資料,所以想寫個簡單的關於表格方面的控制元件出來,想用JSON資料直接渲染出來,因為開發給到我們前端的欄位可能會叫不同的名字,所以我們前端渲染頁面時候不應該依賴以欄位的key值來渲染,也就是說不管開發返回的key鍵,我這個控制元件都能滿足支援它。所以今天就寫了個簡單的控制元件出來,JS程式碼就100行左右的程式碼。至於網上很多表格控制元件支援分頁,排序,全選(多選,單選)功能等,而我這個控制元件只支援渲染表格的控制元件,且把他們表格渲染資料分離出來,且做只做一件事情,就是渲染JSON資料到表格裡面來,如果想支援分頁的效果可以看我這篇文章 JS分頁請點選!一樣的 只是在表格底部多加個分頁而已!如果想支援全選效果,請看我這篇文章 全選請點選我!
如果想對錶格排序,請看我這篇文章 表格排序請點選我!
下面不多說,請先看JSfiddle效果,效果如下:
當然控制元件裡面也支援渲染單選框或者核取方塊,只是可以配置引數isRadio為true或者isCheck(核取方塊)為true即可,如果不需要單選框或者核取方塊的話,他們都為false,預設情況下都為false。
HTML程式碼如下:
<table cellspacing = "0" cellpadding = "0"> <thead> <tr> <!--<th width="5%">選擇</th> --> <th width="20%">表格控制元件1</th> <th width="10%">表格控制元件2</th> <th width="20%">表格控制元件3</th> <th width="20%">表格控制元件4</th> <th width="15%">表格控制元件5</th> <th width="15%">表格控制元件6</th> </tr> </thead> <tbody id="j-tbody"></tbody> </table>
CSS程式碼如下:
<style> table { width:100%; border:1px solid #ccc; border-right:none; border-bottom:none; } table thead th { font-size:14px; color: #333; font-weight:normal; border-right:1px solid #ccc; border-bottom:1px solid #ccc; } table td{ font-size:12px; color: #333; font-weight:normal; border-right:1px solid #ccc; border-bottom:1px solid #ccc; text-align:center; } </style>
JS程式碼如下:
/** * 簡單的表格json資料展示 * @time 2014-4-23 * var data = [ {"parentId":9944267,"categoryName":"建立交易","categoryId":9944343}, {"parentId":9944267,"categoryName":"支付","categoryId":9944344}, {"parentId":9944267,"categoryName":"退款","categoryId":9944344}, {"parentId":9944267,"categoryName":"退款","categoryId":9944344}, {"parentId":9944267,"categoryName":"退款","categoryId":9944344}, {"parentId":9944267,"categoryName":"退款","categoryId":9944344}]; */ function TableData(options) { this.config = { container : '#j-tbody', // 預設tbody容器 JSONData : '', // json資料 isRadio : false, // 是否單選 isCheck : false, // 是否多選 callback : null }; this.cache = { }; this.init(options); } TableData.prototype = { constructor: TableData, init: function(options) { this.config = $.extend(this.config,options || {}); var self = this, _config = self.config; // 渲染表格資料 self._renderHTML(); }, /* * 渲染tbody裡面的資料 * @method _renderHTML * @private */ _renderHTML: function() { var self = this, _config = self.config; // 先清空 $(_config.container).html(''); for(var i = 0; i < _config.JSONData.length; i++) { var tr = document.createElement("tr"), arrs = self._returnArrs(_config.JSONData[i]); for(var j = 0; j < arrs.length; j++) { var td = document.createElement('td'); $(td).html(arrs[j]); tr.appendChild(td); } if(_config.isRadio) { var radio = $('<td><input type="radio" class=""/></td>'); $(tr).prepend(radio); } if(_config.isCheck) { var radio = $('<td><input type="checkbox" class=""/></td>'); $(tr).prepend(radio); } $(_config.container)[0].appendChild(tr); } // 一次性插入資料 _config.callback && $.isFunction(_config.callback) && _config.callback(); }, /* * 返回陣列 * @private _returnArrs * @return {arrs} 返回陣列 */ _returnArrs: function(obj){ var arrs = []; for(var k in obj) { if(obj.hasOwnProperty(k)) { arrs.push(obj[k]); } } return arrs; } };
JS初始化方式如下:
// 初始化資料 $(function(){ var data = [ {"parentId":9944267,"categoryName":"建立交易","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa1'}, {"parentId":9944268,"categoryName":"支付","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa2'}, {"parentId":9944269,"categoryName":"退款","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa3'}, {"parentId":9944270,"categoryName":"退款","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa4'}, {"parentId":9944271,"categoryName":"退款","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa5'}, {"parentId":9944272,"categoryName":"退款","categoryId":"9944343","XX":"111","YY":"XXX","ZZ":'aa6'}]; new TableData({ JSONData : data }); });