左侧是表头的JS表格控件(自写,网上没有的)

今天,项目中要用到该表格,找了一遍,发现没有合适的,于是自己动手丰衣足食。
 
最终呈现效果如上图,
1、左侧是表头的表格数据展现,
2、支持多行,多表头
3、固定表头的功能
4、能够支持标题
5、获取表格中的数据
6、支持IE/CHROME
7、 表格能够自适应根据内容行居中


代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Grid左侧固定测试</title>
<script src=LeftHeadGrid.js></script>
<link href="LeftHeadGrid.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div id="testdiv" align="center"></div>
</form>
</body>
<script type="text/javascript" >
var test = new LeftHeadGrid({
id: "leftHeadGrid",
width: 800,
title:"danielinbiti",
perUnitWidth:300,
rowHeads:[{
width:"60",
rowname:[{name:"日期"},{name:"数值"}]
}],
columnDatas:[{
width:[1,1],
rows:[[10130501,101011],[2,3]]
}]
});
test.RenderTo("testdiv");
</script>
</html>

LeftHeadGrid.js


代码如下:

var LeftHeadGrid = function(config) {
this.rowHeads = config.rowHeads != null ? config.rowHeads: [];//name
this.columnDatas = config.columnDatas != null ? config.columnDatas: [];
this.width = config.width != null ? config.width: "";
this.id = config.id != null ? config.id: "TreGrid";
this.perUnitWidth = config.perUnitWidth != null ? config.perUnitWidth: 10;
this.innerWidth = 0;
this.innerLWidth = 0;
this.height = 0;
this.title = config.title != null ? config.title: "";
this.noDataStr = config.noDataStr != null ? config.noDataStr: "no data";
}
LeftHeadGrid.prototype.createGrid = function(){
var totalwidth = 0;
var tableHtml = "<table>";
for(var i=0;i<this.rowHeads.length;i++){
var obj = this.rowHeads[i];
var width = obj.width;
totalwidth = totalwidth + parseInt(width);
var rownameobj = obj.rowname;

for(var j=0;j<rownameobj.length;j++){
var nameobj = rownameobj[j];
if(j==rownameobj.length-1){
tableHtml = tableHtml + "<tr><td class='bluelast' width='" + width + "px'>" + nameobj.name + "</td></tr>";
}else{
tableHtml = tableHtml + "<tr><td class='bluefirst' width='" + width + "px'>" + nameobj.name + "</td></tr>";
}
this.height = this.height + 40;
}
}
tableHtml = tableHtml + "</table>";
var headHtml = "<div class='leftheadcss' style='width:" + totalwidth + "px;'>";
headHtml = headHtml + tableHtml + "</div>";
this.innerLWidth = totalwidth;
this.innerWidth = this.width-totalwidth-5;
return headHtml;
}
LeftHeadGrid.prototype.RenderTo =function(divId){

//var innerWidth = this.width-100;
var headHtml = this.createGrid();
var html = "<div id='outframe' class='outframecss' style='width:" + this.width + "px;'>"
+ headHtml
+ "<div id='dataframe' class='dataframecss' style='width:" + this.innerWidth + "px;'>"
+ "<div id='leftgriddataview' class='innerdivcss'>"
+ "</div>"
+ "</div>"
+ "</div>"
html = "<div id='divtitle' class='grittitle' style='width:" + this.width + "px;height:30px'><big>" + this.title + "</big></div>"
+ html + "</div>";
document.getElementById(divId).innerHTML = html;
this.show();
}
LeftHeadGrid.prototype.show = function(){
if(this.columnDatas && this.columnDatas.length>0){
var obj = this.columnDatas[0];
var widthArr = obj.width;
var rows = obj.rows;
var totalWidth = 0;
for(var i=0;i<widthArr.length;i++){
widthArr[i] = parseInt(widthArr[i])*this.perUnitWidth;
totalWidth = totalWidth + widthArr[i];
}
var tableHtml = "<table width='"+totalWidth +"'>";
for(var i=0;i<rows.length;i++){
var rowvalueArr = rows[i];
tableHtml = tableHtml + "<tr>";
for(var j=0;j<rowvalueArr.length;j++){
tableHtml = tableHtml + "<td width='"+widthArr[j]+"px'>" + rowvalueArr[j] + "</td>";
}
tableHtml = tableHtml + "</tr>";
}
tableHtml = tableHtml + "</table>";
if(this.innerWidth>totalWidth){
document.getElementById("dataframe").style.width=(parseInt(totalWidth))+"px";
document.getElementById("divtitle").style.width=(parseInt(this.innerLWidth)+parseInt(totalWidth))+"px";
document.getElementById("outframe").style.width=(parseInt(this.innerLWidth)+parseInt(totalWidth)+4)+"px";
}
document.getElementById("leftgriddataview").innerHTML = tableHtml;
}else{
document.getElementById("leftgriddataview").style.height=(this.height+4)+"px";
document.getElementById("leftgriddataview").innerHTML = this.noDataStr;
}
}
LeftHeadGrid.prototype.addData = function(data){
this.columnDatas = data;
this.show();
}
LeftHeadGrid.prototype.getData = function(){
var rtnObj = new Array();
if(this.columnDatas && this.columnDatas.length>0){
var obj = this.columnDatas[0];
var widthArr = obj.width;
var rows = obj.rows;
for(var i=0;i<rows.length;i++){
var rowvalueArr = rows[i];
for(var j=0;j<rowvalueArr.length;j++){
if(j==0){
rtnObj[i] = rowvalueArr[j];
}else{
rtnObj[i] = rtnObj[i] + "," + rowvalueArr[j];
}
}
}
}
return rtnObj;
}
LeftHeadGrid.prototype.getHead = function(){
var rtnObj = new Array();
for(var i=0;i<this.rowHeads.length;i++){
var obj = this.rowHeads[i];
var rownameobj = obj.rowname;

for(var j=0;j<rownameobj.length;j++){
var nameobj = rownameobj[j];
if(j==0){
rtnObj[i] = nameobj.name;
}else{
rtnObj[i] = rtnObj[i] + "," + nameobj.name;
}
}
}
return rtnObj;
}

如果有需要,各位可以自己更改
完整源码:
http://xiazai.jb51.net/201306/yuanma/LeftHeadGrid_jb51net.rar


代码如下:

var LeftHeadGrid = function(config) {
this.rowHeads = config.rowHeads != null ? config.rowHeads: [];//name
this.columnDatas = config.columnDatas != null ? config.columnDatas: [];
this.width = config.width != null ? config.width: "";
this.id = config.id != null ? config.id: "TreGrid";
this.perUnitWidth = config.perUnitWidth != null ? config.perUnitWidth: 10;
this.innerWidth = 0;
this.innerLWidth = 0;
this.height = 0;
this.title = config.title != null ? config.title: "";
this.noDataStr = config.noDataStr != null ? config.noDataStr: "no data";
}
LeftHeadGrid.prototype.createGrid = function(){
var totalwidth = 0;
var tableHtml = "<table>";
for(var i=0;i<this.rowHeads.length;i++){
var obj = this.rowHeads[i];
var width = obj.width;
totalwidth = totalwidth + parseInt(width);
var rownameobj = obj.rowname;

for(var j=0;j<rownameobj.length;j++){
var nameobj = rownameobj[j];
if(j==rownameobj.length-1){
tableHtml = tableHtml + "<tr><td class='bluelast' width='" + width + "px'>" + nameobj.name + "</td></tr>";
}else{
tableHtml = tableHtml + "<tr><td class='bluefirst' width='" + width + "px'>" + nameobj.name + "</td></tr>";
}
this.height = this.height + 40;
}
}
tableHtml = tableHtml + "</table>";
var headHtml = "<div class='leftheadcss' style='width:" + totalwidth + "px;'>";
headHtml = headHtml + tableHtml + "</div>";
this.innerLWidth = totalwidth;
this.innerWidth = this.width-totalwidth-5;
return headHtml;
}
LeftHeadGrid.prototype.RenderTo =function(divId){

//var innerWidth = this.width-100;
var headHtml = this.createGrid();
var html = "<div id='outframe' class='outframecss' style='width:" + this.width + "px;'>"
+ headHtml
+ "<div id='dataframe' class='dataframecss' style='width:" + this.innerWidth + "px;'>"
+ "<div id='leftgriddataview' class='innerdivcss'>"
+ "</div>"
+ "</div>"
+ "</div>"
html = "<div id='divtitle' class='grittitle' style='width:" + this.width + "px;height:30px'><big>" + this.title + "</big></div>"
+ html + "</div>";
document.getElementById(divId).innerHTML = html;
this.show();
}
LeftHeadGrid.prototype.show = function(){
if(this.columnDatas && this.columnDatas.length>0){
var obj = this.columnDatas[0];
var widthArr = obj.width;
var rows = obj.rows;
var totalWidth = 0;
for(var i=0;i<widthArr.length;i++){
widthArr[i] = parseInt(widthArr[i])*this.perUnitWidth;
totalWidth = totalWidth + widthArr[i];
}
var tableHtml = "<table width='"+totalWidth +"'>";
for(var i=0;i<rows.length;i++){
var rowvalueArr = rows[i];
tableHtml = tableHtml + "<tr>";
for(var j=0;j<rowvalueArr.length;j++){
tableHtml = tableHtml + "<td width='"+widthArr[j]+"px'>" + rowvalueArr[j] + "</td>";
}
tableHtml = tableHtml + "</tr>";
}
tableHtml = tableHtml + "</table>";
if(this.innerWidth>totalWidth){
document.getElementById("dataframe").style.width=(parseInt(totalWidth))+"px";
document.getElementById("divtitle").style.width=(parseInt(this.innerLWidth)+parseInt(totalWidth))+"px";
document.getElementById("outframe").style.width=(parseInt(this.innerLWidth)+parseInt(totalWidth)+4)+"px";
}
document.getElementById("leftgriddataview").innerHTML = tableHtml;
}else{
document.getElementById("leftgriddataview").style.height=(this.height+4)+"px";
document.getElementById("leftgriddataview").innerHTML = this.noDataStr;
}
}
LeftHeadGrid.prototype.addData = function(data){
this.columnDatas = data;
this.show();
}
LeftHeadGrid.prototype.getData = function(){
var rtnObj = new Array();
if(this.columnDatas && this.columnDatas.length>0){
var obj = this.columnDatas[0];
var widthArr = obj.width;
var rows = obj.rows;
for(var i=0;i<rows.length;i++){
var rowvalueArr = rows[i];
for(var j=0;j<rowvalueArr.length;j++){
if(j==0){
rtnObj[i] = rowvalueArr[j];
}else{
rtnObj[i] = rtnObj[i] + "," + rowvalueArr[j];
}
}
}
}
return rtnObj;
}
LeftHeadGrid.prototype.getHead = function(){
var rtnObj = new Array();
for(var i=0;i<this.rowHeads.length;i++){
var obj = this.rowHeads[i];
var rownameobj = obj.rowname;

for(var j=0;j<rownameobj.length;j++){
var nameobj = rownameobj[j];
if(j==0){
rtnObj[i] = nameobj.name;
}else{
rtnObj[i] = rtnObj[i] + "," + nameobj.name;
}
}
}
return rtnObj;
}

(0)

相关推荐

  • javascript表格控件:Chgrid,简化型

    本着自由共享的精神,把代码帖出来,同时大家也可以一起来测试以及添加新功能,请大家根据网友提出的问题,把自己修改好的版本都帖出来跟在下面,最后作为一款比较全面的表格软件. Chgrid的简单功能介绍: 1:支持自定义排序 2:支持列宽度的拖放 3:支持自定义函数 4:支持分页 5:支持自动编号 6:多浏览器支持,支持ie6,ie7,ff,opera 7:div布局 已知问题: 1:由于使用的div布局,如果使用margin或者padding会改变定义的列宽度,所以目前文字只能居中或者靠左或靠右,不

  • 详解能在多种前端框架下使用的表格控件

    近几年Web前端框架特别流行,比如AngularJS.AngularJS 2.ReactJS.KnockoutJS.VueJS等.表格控件是我们在开发中经常要用到的控件.有没有能够在多种前端控件下都能使用的表格控件?最近研究发现Wijmo中的FlexGrid是一款不错的表格控件,它能支持很多主流的框架.这里主要介绍在纯JavaScript和AngularJS下FlexGrid的使用. 一.在纯JavaScript下使用FlexGrid HTML文件: <!DOCTYPE html> <h

  • Android自定义DataGridView数据表格控件

    我是一个.net程序员,但是苦于公司要求开发一个android app,没办法,只能硬着头皮上了. 由于项目里面很多地方需要用到数据显示控件(类似于.net的DataGridView),度娘找了下发现没人公开类似的控件,没办法只好自己写了. 废话不多说,直接贴代码: public class DataGridView extends HorizontalScrollView { private List<DataGridViewColumn> columns; private List<

  • JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件

    dotNetFlexGrid是一款asp.net原生的异步表格控件,他的前身是Jquery FlexiGrid插件,我们重构了FlexiGrid的大部分Javascript代码,使其工作的更有效率,BUG更少:同时将其封装为dotNet控件,提供了简单易用的使用方式. dotNetFlexGrid扩展和优化了FlexiGrid原有的功能,并提供了更多具有针对性的功能,使用dotNetFlexGrid,您的用户可以轻松拥有如下功能 提供简易的方式自行调整表格列宽 根据实际情况调整表格的大小 针对合

  • 在web中js实现类似excel的表格控件

    Execl功能非常强大,内置的很多函数或公式可以大大提高对数据的加工处理能力.那么在web中有没有类似的控件呢?经过一番搜寻,发现handsontable具备了基本的excel功能支持公式,同时能对数据进行实时编辑.另外支持拖动复制.Ctrl+C .Ctrl+V 等等.在浏览器支持方面,它支持以下的浏览器: IE7+, FF, Chrome, Safari, Opera. 首先引入相关库文件,公式支持不包含在handsontable.full.js中,需要单独引入: <script src=&quo

  • Android自定义表格控件满足人们对视觉的需求

    Android平台已经给我们提供了很多标准的组件,如:TextView.EditView.Button.ImageView.Menu等,还有许多布局控件,常见的有:AbsoluteLayout.LinerLayout.RelativeLayout.TableLayout等.但随着人们对视觉的需求,基本组件已无法满足人们求新求异的要求,于是我们常常会自定义组件,用来实现更美观的UI界面. 实现自定义控件通常有两种途径,一种是继承View类,重写其中的重要方法,另一种是继承ViewGroup类,通过

  • jquery miniui 教程 表格控件 合并单元格应用

    表格:合并单元格 参考示例:合并单元格 调用方法:margeCells.如下代码: 复制代码 代码如下: grid.on("load", onLoad); function onLoad(e) { var grid = e.sender; var marges = [ { rowIndex: 1, columnIndex: 0, rowSpan: 1, colSpan: 2 }, { rowIndex: 3, columnIndex: 0, rowSpan: 4, colSpan: 3

  • ExtJS 配置和表格控件使用第1/2页

    ExtJS是一套完整的RIA解决方案,也因为功能完整造成了ext-all.js有400多k,由于是基于JS和CSS的功能实现,对客户端机器性能也有一定的要求,即不支持IE6以下的版本.如果您的项目对网页响应时间有严格的限制,或者客户端操作系统过于陈旧,一定不要选择ExtJS. 本文主要是介绍ExtJS的下载和配置以及一些简单的使用方法.目前最新版本为3.0,但是本文主要介绍2.2版本. 一.ExtJS下载以及配置 1.下载地址:www.extjs.com/(这是官网,大家可以选择自己喜欢的版本下

  • 最棒的Angular2表格控件

    现在市面上有大量的JavaScript数据表格控件,包括开源的第三方的和自产自销的.可以说Wijmo的Flexgrid是目前适应Angular 2的最好的表格控件. Angular 2数据表格基本要求: 更小.更快.更熟悉. 为了使用Angular 2表格,首先你需要了解表格的基本要求.FlexGrid开始于1996年,当时使用C++为Visual Basic编写的控件.多年来,它不断进化并在多个平台得到完善,尤其是JavaScript平台.FlexGrid 因为Flex的理念而命名,控件应当包

  • ASP.NET Table 表格控件的使用方法

    一个Table对象包含多个行TableRow,每一行又包含TableCell,TableCell中可以包含其他的HTML或者服务器控件作为Web服务器控件. 一.Table中的属性 Table对象: BackImageUrl 表格的背景图像的URL Caption 表格标题 CaptionAlign 标题文本对齐方式 CellPadding Table单元格内容和单元格边框之间的空间量(单位:像素) CellSpacing 相邻单元格之间的空间量 Rows Table控件中行的集合 TableR

随机推荐