自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
一、前言
也没什么好说的嘛,用了蛮多github上开源的能够实现dataTable功能的表格插件,不过都默认绑定样式啊,数据格式也设定的比较死,所以忍不住自己实现了一个简单的可自定义样式和自定义数据返回格式的数据表格插件,原生js是保留的,后面如果更新新版本的话会去除对jQuery依赖。实话实说,分页确实没做好,自定义样式后面抽空会继续完善。
二、实现功能
一个较高自定义式的数据表格插件,无默认样式文件
三、使用实例
可以自行定义每个标题的样式,可以style,也可以指定class;
分页那里必须指定调用的API
- //所有配置的顺序可以随便排序,不一样要按照我这个顺序,
- var table =new Tables({'id':'#dataTables',//必须,绑定的table,可以是Dom对象(因为底层直接用的$(id),所以像jquery一样用就ok,简单方便)
- 'pageSize':15,//每页显示行数
- 'titles':{"序号":{'style':'width:10%','className':''},"类别":{'style':'width:10%','className':''},"编码":{'style':'width:10%','className':''},"名称":{'style':'width:30%','className':''},"备注":{'style':'width:20%','className':''},"操作":{'style':'width:20%','className':''}},//必须,表格的标题,其实后面的值是可以为空的,后面考虑到要增加复杂结构的标题头生成,所以预留
- 'fields':{
- "1":{"render":function(data,index,f){return index;}},
- "dictionarykind":"",//支持render修改列的展示值
- "dictionarycode":"",
- "dictionaryvalue":"",
- "remark":{"render":function(data,index,f){if(isNull(f)){return "";}return f}},
- "":{'render':function(data,index,f){return "<a href=javascript:javascript:update(\'" +data.dictionaryid +"\',\'"+index+"\')> 修改 </a> <a href=javascript:javascript:remove(\'" +data.dictionaryid +"\',\'"+index+"\')> 删除 </a>"}},//可以出现空字段,不会绑定到表格数据(一般情况下是为了加入控制按钮啥的)
- "dictionaryid":"",
- },//必须,字段映射,与返回数据相同既可以把字段映射到每列,这个就不需要讲了,主要是后面的render可以修改返回参数,另外超出标题数量的字段是会自动隐藏的
- 'ajaxParam':{
- type:"POST",
- dataType:"json",
- async:false,
- url:"cc/eguid/queryList",
- data:function(d){var id=$("#camera_org").val();d.dictionarykind=id;/*这里可以重设参数,内置参数只有pageIndex和pageSize两个*/return d;},
- },//必须,ajax请求,跟jquery的ajax参数一样,好吧,作者偷懒!直接用的$.ajax(ajaxParam)实现的。 -|-心好累
- 'dataRender':function(data){return data.data;},//必须,因为不清楚返回数据的格式,所以必须通过render方法进行定义
- 'control':{
- "previous":'table.previous()',//上一页,可以是其他第三方分页插件的API
- "next":'table.next()'//下一页,同上
- }//必须,分页控制等控件的详细配置
- });
- table.ajax();
- });
四、数据表格插件源码
- /*eguid的数据表格控件*/
- var Tables=(function(param){
- var isNull=function(s){return s==undefined||typeof(s)=='underfinded'||s==null||s==''};
- var getDom=function(id){return document.getElementById(id);};
- //数据处理
- var dataHandler=function(data){
- dataBody="";
- tableDom.find("tbody").html("");
- for(var i=0;i<pageSize;i++){
- var row=data[i];
- if(isNull(row)){//如果为空,说明数据结束
- break;
- }else{
- rowHandler(row,i);
- }
- }
- tableDom.find("tbody").append(dataBody);
- retData=data;
- var num=1;
- if(count>pageSize){
- var t1=count/pageSize;num=t1.toFixed(0);if(num<t1){++num;}
- }
- getDom("cupageTotal").innerHTML=num;
- }
- //处理一行数据
- var rowHandler=function(row,i){
- dataBody+="<tr>";
- var len=titleNum;
- for(field in fields){
- var col=row[field];
- var temp=len>0?"<td>":"<td style='visibility:hidden'>";
- len--;
- var render=fields[field]["render"];
- if(isNull(render)){
- temp+=(col+"</td>");
- }else{
- var renderRet=render(row,i+1,row[field]);
- temp+=(isNull(renderRet)?"":renderRet+"</td>");
- }
- dataBody+=temp;
- }
- dataBody+="</tr>";
- }
- //请求后预处理
- var ajaxHandler=function(data,type){
- if(!isNull(data)){
- var ret=dataRender(data);
- count=ret.count;
- dataHandler(ret.data);
- }
- };
- //新增ajax请求完成处理操作
- var ajaxReq=function (b){
- if(isNull(b)||!b){reloadParam();}
- var d={"pageSize":pageSize,"pageIndex":((pageIndex-1)*pageSize)};
- ajaxComParam.data=isNull(ajaxDataParam)?d:ajaxDataParam(d);
- $.ajax(ajaxComParam);
- };
- var pageNext=function(){
- if(pageIndex<(count/pageSize)){
- getDom("cuPageNum").innerHTML=++pageIndex;
- }
- var d={"pageSize":pageSize,"pageIndex":pageIndex};
- ajaxReq(true);
- return d;
- };
- var pagePrevious=function(){
- if(pageIndex>1){
- getDom("cuPageNum").innerHTML=--pageIndex;
- }
- var d={"pageSize":pageSize,"pageIndex":pageIndex};
- ajaxReq(true);
- return d;
- };
- var reloadParam=function(){
- getDom("cuPageNum").innerHTML=pageIndex=1;
- };
- //初始化表标题;id:表格ID,titles:标题列表,titleNum:标题数量(超出该数量的列自动隐藏),fields:字段
- var id=param.id,titles=param.titles,titleNum=0,fields=param.fields;
- //pageSize:分页数量,pageIndex:分页索引(当前页),count:数据总行数(count/pageSize等于总页数)
- var pageSize=isNull(param.pageSize)?10:param.pageSize,pageIndex=1,count;
- var ajaxComParam;//请求参数
- var ajaxDataParam;//ajax请求的data参数
- var dataRender=param.dataRender;//返回表格数据的具体位置定位
- var tableDom;//表格Dom
- var dataBody;//数据体node
- var retData;//保存每次接收到的ajax数据
- var control=param.control;//分页控件的配置
- /*字段值初始化*/
- var initTableHead=function(row){
- var thead= "<thead><tr>";
- for(title in titles){
- var conf=titles[title];
- var stl=isNull(conf.style)?"":" style='"+conf.style+"' ";
- var cla=isNull(conf.className)?"":" class='"+conf.className+"' ";
- thead+="<td"+stl+">"+title+"</td>";
- ++titleNum;
- }
- thead+="</tr></thead>";
- return thead;
- }
- var initTableBody=function(){
- var tbody="<tbody></tbody>";
- return tbody;
- }
- var initTableFoot=function(){
- var tfoot="<tfoot><tr>";
- tfoot+="<td colspan='"+titleNum+"'><span>总页数:</span><span id='cupageTotal'>"+1+"</span> <span>当前页:</span><span id='cuPageNum'>"+1+"</span>";
- tfoot+=" <button onclick='"+(isNull(control.previous)?'javascript:void(0);':control.previous)+"'> 上一页 </button> <button onclick='"+(isNull(control.next)?'javascript:void(0);':control.next)+"'> 下一页 </button>"
- tfoot+="</td></tr></tfoot>";
- return tfoot;
- }
- var initTableNode=function(){
- tableDom=$(id).append(initTableHead(titles)+initTableBody()+initTableFoot());
- }
- var initAjaxParam=function(){
- ajaxComParam=param.ajaxParam;
- if(ajaxComParam.data.constructor===Function){
- ajaxDataParam=ajaxComParam.data;
- }
- ajaxComParam.success=ajaxHandler;
- }
- var initAll=function(){
- initAjaxParam();
- initTableNode();
- };
- initAll();
- //公开接口
- return{
- ajax:ajaxReq,//异步加载
- json:dataHandler,//嘛,直接导入json
- next:pageNext,//下一页
- previous:pagePrevious,//上一页
- }
- });
话说开放的API只有四个(不算初始化的话),如果要增加一些API可以自己在return的对象中自行加入即可
自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义的更多相关文章
- 数据表格控件 DataGridControl
数据表格控件 书154页 <?xml version="1.0" encoding="utf-8"?> <s:Application xmln ...
- 在GridControl表格控件中实现多层级主从表数据的展示
在一些应用场景中,我们需要实现多层级的数据表格显示,如常规的二级主从表数据展示,甚至也有多个层级展示的需求,那么我们如何通过DevExpress的GridControl控表格件实现这种业务需求呢?本篇 ...
- [ PyQt入门教程 ] PyQt5中数据表格控件QTableWidget使用方法
如果你想让你开发的PyQt5工具展示的数据显得整齐.美观.好看,显得符合你的气质,可以考虑使用QTableWidget控件.之前一直使用的是textBrowser文本框控件,数据展示还是不太美观.其中 ...
- 表格控件表头栏目(Column)与数据表头步
不用手工增加栏目的列,也就是Column,由数据库的查询结果自动创建. 用的是Delphi2010,安装了Dev,用CxGrid显示数据库查询结果.用什么控件没有关键,道理相同的.
- jQuery数据表格控件boostrap-table
表格初始化js代码 function TableInit() { $("#edit").attr({"disabled":"disabled" ...
- 最好的Angular2表格控件
现在市面上有大量的JavaScript数据表格控件,包括开源的第三方的和自产自销的.可以说Wijmo的Flexgrid是目前适应Angular 2的最好的表格控件. Angular 2数据表格基本要求 ...
- Ext入门学习系列(五)表格控件(2)
上节学习了Ext中表格控件,从创建,到定义数据源.绑定显示,大体明白了一个基本的表格控件是怎么实现的.而我们用表格控件多用于从各种数据源接收数据并显示出来,并不是写死的.本章我们就不同数据源的不同实现 ...
- 【案例分享】在 React 框架中使用 SpreadJS 纯前端表格控件
[案例分享]在 React 框架中使用 SpreadJS 纯前端表格控件 本期葡萄城公开课,将由国电联合动力技术有限公司,资深前端开发工程师——李林慧女士,与大家在线分享“在 React 框架中使用 ...
- Atitit 项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx
Atitit 项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...
随机推荐
- C#解析json的两种方式
C#中Json转换主要使用的几种方法! 这篇主要介绍2.4.第三种方法使用的比较局限,所以我没有深入学习. 第二种方法 我使用比较多的方式,这个方法是.NET内置的,使用起来比较方便 A.利用seri ...
- Thrift总结(一)介绍
这段时间,一直在整理公司的内部 rpc 服务接口,面临的一个问题就是:由于公司内部的系统由几个不同的语言编写的.C# ,java,node.js 等,如何实现这些内部系统之间的接口统一调用,确实是比较 ...
- JavaScript设计模式_03_代理模式
代理模式是非常常见的模式,比如我们使用的VPN工具,明星的经纪人,都是代理模式的例子.但是,有人会疑问,明明可以直接访问对象,为什么中间还要加一个壳呢?这也就说到了代理模式的好处.在我看来,代理模式最 ...
- 创建对象的N种模式
1 new Object() 先创建一个Object实例,然后为它添加属性和方法 var Person = new Object() Person.name = 'hl' Person.sayName ...
- selenium+python元素操作
1.判断元素的属性if i.get_attribute('type') == 'checkbox' 2.获取当前窗口的坐标 driver.get_window_position 获取当前窗口的长宽 d ...
- Page directive must not have multiple occurrences of pageencoding
一个jsp文件中不能同时出现两个 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #932192 } pageE ...
- 模拟对象测试——EasyMock
一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...
- cms基本概念(dedecms,phpcms)
1.什么是cms? cms是"Content Management System"的缩写,意为"内容管理系统". 内容管理系统是企业信息化建设和电子政务的新宠, ...
- Rhythmbox音乐播放器常见问题
一.歌名中文乱码 对于所有用gstreamer做后端的播放器,如Rhythmbox, 设置如下的环境变量后即可正确读取mp3中GBK编码的id3 tag. export GST_ID3_TAG_ENC ...
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
导SQL数据库结构+数据时,如果数据是批量插入的话会报错:2006 - MySQL server has gone away. 解决办法:找到你的mysql目录下的my.ini配置文件(如果安装目录没 ...