实战jquery(1)-自建datagrid,有图有真相有源码

本文介绍了使用jQuery自建datagrid的实战经验,包括组件结构、兼容性挑战及解决方法。通过将内容包裹在div中,利用表格和div实现表头固定效果,并探讨了CSS在不同浏览器的兼容性问题。

 css在不同浏览器的兼容性让人头痛。先发图

基本思路如下:

1、datagrid包裹在一个大的div中,里面包括header、title、body、footer几个部门,每个部分都是一个div

2、标题和内容都包含一个具有相同col的table,通过body的scroll函数滚动标题部门的div,使表头和内容看起来是一个整体

3、设置图片背景实现效果,但是css不支持拉伸,要为每个高度实现图片是个讨厌的事情。

构造函数:

	/**
	 * DataGrid Class.
	 * @param setting 表格配置,包括表头标题,列配置等,可以继续扩展
	 * @param id	  表的ID,dom中的ID;
	 * @param owner   表的父容器。
	 * 
	 */
	$.DS.UI.DataGrid = function(setting, id, owner)

构造表的过程如下:

	dataGrid = new $.DS.UI.DataGrid({
		headerTitle:"借阅书籍列表",
		columns:[
			{title:"书籍名称", field:"bookname", width:350},
			{title:"书刊号", field:"bookid", width:250},
			{title:"借阅日期", field:"date", width:200},
			{title:"过期天数", field:"days", width:430},
			{title:"逾期费用", field:"fee", width:430}
			]},"gd_booklist","#booklist");
			
	dataGrid.setJSONData([
		{bookname:"金刚葫芦娃之奥特曼大战孙悟空哪咤打小怪物", bookid:"KJ0001", date:"2011-10-10", days:"5", fee:"0"},
		{bookname:"豆豆龙(1)", bookid:"KJ0002", date:"2011-10-10", days:"5", fee:"0"},
		{bookname:"豆豆龙(2)", bookid:"KJ0002", date:"2011-10-10", days:"5", fee:"0"},
		{bookname:"豆豆龙(3)", bookid:"KJ0002", date:"2011-10-10", days:"5", fee:"0"},
		{bookname:"豆豆龙(4)", bookid:"KJ0002", date:"2011-10-10", days:"5", fee:"0"},
		{bookname:"豆豆龙(5)", bookid:"KJ0002", date:"2011-10-10", days:"5", fee:"0"}
	]);

完整代码和css如下:

js代码:

(function($){
	if( !$.DS ) $.DS = {};
	if( !$.DS.UI ) $.DS.UI = {};
	
	$.DS.UI.defaultDataGridSetting = {
		
	};
	
	$.DS.UI.allDataGrid = {};
	
	/**
	 * DataGrid Class.
	 * @param setting 表格配置,包括表头标题,列配置等,可以继续扩展
	 * @param id	表的ID,dom中的ID;
	 * @param owner   表的父容器。
	 * 
	 */
	$.DS.UI.DataGrid = function(setting, id, owner){
		this.id = id;
		if( !id ) id = "_dg_"+Math.random();
		
		this.setting = $.extend($.DS.UI.defaultDataGridSetting, setting);
		
		this.frame = $("<DIV id=\""+id+"\"></div>");
		this.frame[0]._jobj = this;
		this.frame.addClass("datagrid-frame");
		this.frame.append("<div id=\"_dg_header\">"+setting.headerTitle+"</div>" +
				"<div id=\"_dg_title\"/>" +
				"<div id=\"_dg_body\"/>" +
				"<div id=\"_dg_footer\">footer</div>");
				
		this.header = this.frame.find("#_dg_header");
		this.header.addClass("datagrid-header");
		
		this.title = this.frame.find("#_dg_title");
		this.title.addClass("datagrid-title");
		
		this.body = this.frame.find("#_dg_body");
		this.body.addClass("datagrid-body");
		
		var _title = this.title;
		var _body = this.body;
		
		_frame = this;
		
		this.body.scroll(function(obj){
			_frame.title.offset({left:_frame.content.offset().left});
		});
		
		this.footer = this.frame.find("#_dg_footer");
		this.footer.addClass("datagrid-footer");
		
		this.columns(setting.columns);
		
		this.owner(owner);
	};
	
	$.DS.UI.DataGrid.prototype = {
		/**
		 * @param parent null=getter not null=setter
		 */
		owner:function(owner){
			if( null === owner ) return this._owner;
			if( $(owner) === this._owner ) return this._owner;
			//remove from current parent; 
			if(this._owner) _owner.remove(this.id); 
			this._owner = $(owner);
			this._owner.append(this.frame);
			this.updateDisplay();
		},
		
		columns:function(columns){
			if( null === columns ) return this._columns;
			
			this._columns = columns;
			this.title.empty();
			var title = "";
			var cols = "";
			var testTB = "";
			var columnslength = 0;
			for (var i=0;i<this._columns.length;i++){
				var field = this._columns[i];
				columnslength += field.width;
				//title += "<div style=\"width:"+(field.width)+"\" class=\"datagrid-title-cell\"><p>"+field.title+"</P></div>";
				title += "<td>"+field.title+"</td>";
				cols += "<col width=\""+(field.width)+"\"/>";
				//testTB += "<td>asdfasdf</td>";
			}
			
			this.title.width(columnslength+1000);
			title = "<table style=\"float:left\" width=\""+(columnslength)+"\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"+cols+"<tr>"+title+"</tr></table>";
			title += "<table style=\"float:left\" width=\"900\"  cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td width=\"900\"> </td></tr></table>";
			this.title.html(title);
			
			var tab = "<table width=\""+columnslength+"\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" id=\"_dg_contant\">"+cols+"<tbody/></table>";
			this.body.html(tab);
			this.content = this.body.find("#_dg_contant");
			//this.content.find(">tbody").append("<tr>"+testTB+"</tr>");
		},
		
		loadData:function(url){
			
		},
		
		updateDisplay:function(){
			this.body.width(this.body.parent().width()- 2);
			this.body.height(this.body.parent().height() - this.header.height() 
				- this.title.height() - this.footer.height() );
		},
		
		setJSONData:function(data){
			this.content.find(">tbody").empty();
			var html = "";
			for(var j=0; j < data.length; j++){
				html = "<tr class=\"datagrid-body-row-"+ (j%2) +"\">"
				for (var i=0;i<this._columns.length;i++){
					var field = this._columns[i];
					value = data[j][field.field] || ' ';
					html += "<td>"+value+"</td>";
				}
				html += "</tr>";
				this.content.find(">tbody").append(html);
			}
		},
		
		setDatasource:function(datasource){
			
		}
	}
	
	$.DS.UI.findDataGrid = function(id){
		return $.DS.UI.allDataGrid[id];
	}
})(jQuery)

css部分

@CHARSET "UTF-8";

.datagrid-frame{
	border-bottom: 1px solid #999999;
	border-top: 1px solid #ffffff;
	border-left: 1px solid  #ffffff;
	border-right: 1px solid #999999;
	
	width:99%;
	height:99%;
	text-align: left;
	overflow: hidden
}

.datagrid-header{
	font-size: 20;
	padding:2 2 2 2;
	font-family: 黑体;
	overflow: hidden
}

.datagrid-title-viewport{
	width:100%;
	position: relative;
	list-style: none;
	overflow: hidden
}

.datagrid-title{
	left: 0;
	border-bottom: 1px solid #999999;
	border-top: 1px solid #eeeeee;
	               	
	position: relative;
	overflow:hidden	
}

.datagrid-title td{
	border-bottom: 1px solid #666666;
	border-top: 1px solid #ffffff;
	border-left: 1px solid  #ffffff;
	border-right: 1px solid #666666;
	
	font-size: 28;
	text-align: center;
	font-weight: bold;
	cursor: pointer;
	background-color: #999
}

.datagrid-title-cell{
	position: relative;
	float:left;
	/*padding: 0 5 0 5;*/
	cursor: pointer;
	border-bottom: 1px solid #999999;
	border-top: 1px solid #ffffff;
	border-left: 1px solid  #ffffff;
	border-right: 1px solid #999999;

	background-color: #aaaaaa;
	font-weight: bold;
	font-size: 26;
}

.datagrid-body{
	overflow:auto;
	border-bottom: 1px solid #999999
}

.datagrid-body td{

	border-bottom: 1px solid #666666;
	border-top: 1px solid #ffffff;
	border-left: 1px solid  #ffffff;
	border-right: 1px solid #666666;
  
	font-size: 25;
}

.datagrid-body-row-0{
	background: #111
}

.datagrid-body-row-1{
	background: #223
}

.datagrid-body-cell{
	
}

.datagrid-footer{
	font-size: 30;
	font-family: 黑体
}
内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
内容概要:本文围绕电力系统状态估计中的异常检测与分类展开,重点介绍基于Matlab代码实现的相关算法与仿真方法。文章详细阐述了在状态估计过程中如何识别和分类量测数据中的异常值,如坏数据、拓扑错误和参数误差等,采用包括残差分析、加权最小二乘法(WLS)、标准化残差检测等多种经典与现代检测手段,并结合实际算例验证方法的有效性。同时,文档提及多种状态估计算法如UKF、AUKF、EUKF等在负荷突变等动态场景下的应用,强调异常处理对提升电力系统运行可靠性与安全性的重要意义。; 适合人群:具备电力系统基础知识和一定Matlab编程能力的高校研究生、科研人员及从事电力系【状态估计】电力系统状态估计中的异常检测与分类(Matlab代码实现)统自动化相关工作的工程技术人员。; 使用场景及目标:①掌握电力系统状态估计中异常数据的产生机制与分类方法;②学习并实现主流异常检测算法,提升对状态估计鲁棒性的理解与仿真能力;③服务于科研项目、课程设计或实际工程中的数据质量分析环节; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,配合电力系统状态估计的基本理论进行深入理解,重点关注异常检测流程的设计逻辑与不同算法的性能对比,宜从简单案例入手逐步过渡到复杂系统仿真。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值