表格插件的封装

//创建组件
function Grid(args){
	//判断各种重要数据是否存在
	try{
		//如果渲染区域不存在
		if(!args.renderTo){
			throw "渲染区域不存在";
		}
		
		//判断初始化数据是否存在
		if(!args.colums){
			throw "必要数据“列名”不存在";
		}
		//判断初始化数据是否存在
		if(!args.dataSource){
			throw "渲染数据不存在";
		}
		
		//点击事件
		if(args.onClick && !(typeof args.onClick == 'function')){
			throw "点击事件必须是一个function,现在的数据类型是:"+typeof args.onClick ;
		}

		
	}catch(e){
		alert("Grid组件初始化失败,原因:"+e);
		
	}
	
	
	
	//调用初始化事件
	this.init(args);
}
//初始化事件
Grid.prototype.init = function(args){
	//获取渲染地址
	this.renderTo = args.renderTo;
	//获取父元素
	this.renderTo = $("#"+this.renderTo);
	this.renderTo.addClass("my-grid");

	
	//获取渲染数据
	this.dataSource = args.dataSource;
	//获取表格的列名
	this.colums = args.colums;
	//点击事件
	this.onClick = args.onClick && typeof args.onClick == "function" ? args.onClick : function(){};
	
	//带取分页参数
	if(args.postData){
		//判断是否传递参数
		if(args.postData.pageSize == null){
			args.postData.pageSize = 10;
		}
		
		if(args.postData.pageNum == null){
			args.postData.pageNum = 11;
		}
		
	}else{
		args.postData = {
			pageSize:10,	
			pageNum:1
		};
	}
	this.postData=args.postData;
	

	//将数据缓存到当前父元素身上
	this.renderTo.data("args",args);

	//创建组件
	this.byDataSource();
	
};
//根据dataSource获取数据
Grid.prototype.byDataSource = function(){
	var t = this;
	
	if(typeof t.dataSource == 'string'){
		/*$.ajax({
		   type: "POST",
		   url: t.dataSource,
		   success: function(res){
		     t.dataSource = JSON.parse(res);
		     t.bulid();
		   }
		});*/
		//使用post提交方式
		$.post(t.dataSource,t.postData,function(res){
			 t.dataSource =res;
		     t.bulid();
		},"json");
	}else{
		t.bulid();
	}	
};

//表格刷新
Grid.prototype.reload = function(pageSize,pageNum){
	
	var t =this;
	
	//从当前父元素身上将数据取出
	var args = t.renderTo.data("args");
	
	if(pageSize){
		args.postData.pageSize = pageSize;
	}
	
	if(pageNum){
		args.postData.pageNum = pageNum;
	}
	
	//重新加载表格
	
	t.init(args);
	
} ;


//创建页面元素
Grid.prototype.bulid = function(){
	
	var t = this;
	//获取父元素
	/*this.renderTo = $("#"+this.renderTo);
	this.renderTo.addClass("my-grid");*/
	
	//清空之前的数据
	this.renderTo.html("");

	

	//创建table标签
	this.grid = $('<table class="grid"></table>').appendTo(this.renderTo);
	
	//创建thead标签
	this.head = $('<thead></thead>').appendTo(this.grid);
	//创建thead标签中的tr标签
	this.theadTr = $('<tr class="gridhead"></tr>').appendTo(this.head);
	//创建thead中th标签
	$(t.colums).each(function(i,colum){
		//创建th
		var th=$('<th>'+colum.name+'</th>').appendTo(t.theadTr);
		if(colum.hide){
			th.addClass("hidden");
		}
	});
	
	//创建tbody标签
	this.tbody = $('<tbody></tbody>').appendTo(this.grid);
	//创建tbody中的tr
	$(t.dataSource.rows).each(function(i, row){
		var tbodyTr = $('<tr class="gridtr" data-id="'+row.id+'"></tr>').appendTo(t.tbody);
		//向tbody中的tr添加td数据
		$(t.colums).each(function(i,col){
			//旧字段表示从数据库中传过来的数据,新字段表示格式化后的字段
			var oldText ,newText;
			oldText = newText = row[col.alins];
			
			//保存格式化之前的数据
			if(col.originalFomatter && typeof col.originalFomatter == "function" ){
				oldText = col.originalFomatter(oldText);
			}
			
			//格式化数据
			if(col.formatter && typeof col.formatter == "function"){
			
				newText = col.formatter(row[col.alins]);
			}
			var td=$('<td alias="'+col.alins+'" originalFomatter="'+oldText+'">'+newText+'</td>').appendTo(tbodyTr);
			if(col.hide){
				td.addClass("hidden");
			}
			if(col.align){
				td.addClass("align"+col.align);
			}
			/*if(col.money==1){
				$('<i class="fa fa-circle fa-orange" aria-hidden="true"></i>').appendTo(this.td);
			}*/
		});
	});
	
	//封装分页组件
	var arrPage = [];
	arrPage.push('<div><table  class="page"><tr>');
	arrPage.push('<td style="width: 1em">共</td>');
	arrPage.push('<td style="width: 1em;color:#ef5b00;">'+t.dataSource.total+'</td>');
	arrPage.push('<td style="width: 8.5em">条         每页展示</td>');
	arrPage.push('<td style="width: 5em"><div id="pageSize" class="pageSize"></div></td>');
	arrPage.push('<td >条</td>');
	arrPage.push('<td class="page-prev"><input type="button" id="prevPage" value="上一页" /></td>');
	arrPage.push('<td class="page-cur"><span class="currPage">'+t.postData.pageNum+'</span>/<span class="total">'+Math.ceil(parseInt(t.dataSource.total)/t.postData.pageSize)+'</span></td>');
	arrPage.push('<td class="page-next"><input type="button" id="nextPage" value="下一页" /></td>');
	arrPage.push('<td class="page-input"><input type="text" id="jumptext"/></td>');
	arrPage.push('<td class="page-go"><input type="button" value="跳转" id="jump"/></td>');
	arrPage.push('</tr></table></div>');
	
	//将分页组件添加到表格组件中
	var pageText = $(arrPage.join(""));
	pageText.appendTo(t.renderTo);
	
	//选择样式
	this.selectitem=$('<div id="select-item"></div>');
	this.selectitem.appendTo(t.renderTo);
		
	//悬浮样式
	this.hoveritem=$('<div id="hover-item" class="hidden"></div>');
	this.hoveritem.appendTo(t.renderTo);
	
	//调用事件
	t.bindEvent();
	
};

//事件绑定
Grid.prototype.bindEvent = function(){
	var t = this;
	$("#edit-btn").addClass("btn-disable");
	$("#remove-btn").addClass("btn-disable");
	$(".gridtr",t.renderTo).click(function(){
		//判断当前选中行是否具有grid-select
		if($(this).hasClass("grid-select")){
			$(this).removeClass("grid-select");
		}else{
			$(".gridtr",t.renderTo).removeClass("grid-select");
			$(this).addClass("grid-select");
		}
		
		
		
	
		//调用点击事件
		t.onClick({
			"id":$(this).attr("data-id")
		});
	});
	

	//实例化下拉列表
	new DDL({
		"renderTo":$(".pageSize",t.renderTo).attr("id") ,
		"dataSource":[{
			"id":10,
			"name":10
		},{
			"id":20,
			"name":20
		},{
			"id":50,
			"name":50
		}],
		"beginOffset":1,
		"direction":"up",
		"offset":0,
		"mapping":{ //匹配映射关系
			"key":"id",
			"value":"name"
		},
		"defaultSelect":parseInt(t.postData.pageSize),
		"onClick":function(obj){
			//alert(obj.key);
			t.reload(obj.key, 1);
		}
	});
	
	//下一页按钮点击事件
	$("#nextPage",t.renderTo).click(function(){
		//获取最大页数
		var maxPage = parseInt($(".total",t.renderTo).text());
		//当前页数+1
		var page = parseInt($(".currPage",t.renderTo).text())+1;
		if(page >= maxPage){
			page = maxPage;
		}
		$(".currPage",t.renderTo).html(page);
		//刷新表格
		//t.reload($(".selectDdlItem",t.renderTo).attr("data-index"), page);
		t.reload(t.postData.pageSize, page);
	});
	
	//上一页按钮点击事件
	$("#prevPage",t.renderTo).click(function(){
		//获取最大页数
		var maxPage = parseInt($(".total",t.renderTo).text());
		//当前页数-1
		var page = parseInt($(".currPage",t.renderTo).text())-1;
		if(page <=1){
			page = 1;
		}
		$(".currPage",t.renderTo).html(page);
		//刷新表格
		//t.reload($(".selectDdlItem",t.renderTo).attr("data-index"), page);
		t.reload(t.postData.pageSize, page);
	});

	//跳转
	$("#jump", t.renderTo).click(function(){	
		var  pagetext=parseInt($("#jumptext",t.renderTo).val());
		t.reload(t.postData.pageSize, pagetext);
	});
	
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值