最近自己封装了个JS脚本,用来创建和操作Table
/**
依赖JQuery **/ (function () {
var Table = window.Table = function (rowCount, columnCount, width, height, rowHeight) {
this.rowCount = rowCount;
this.columnCount = columnCount;
this.width = width;
this.height = height;
this.rowHeight = rowHeight;
this.context;
this.tableCss;
this.rowCss;
this.columnCss;
this.onTdCreated = function () { };
this.onTdMouseDown = function (e) { };
this.onTrCreated = function () { };
this.onTrMouseDown = function (e) { };
};
Table.prototype.CreateTable = function (target) {
this.context = $("<table style='width:auto'></table>"); if (this.tableCss)
this.context.addClass(this.tableCss);
if (this.width)
this.context.css("width", this.width);
if (this.height)
this.context.css("height", this.height); if (target) {
this.context.appendTo(target);
} for (var index = 0; index < this.rowCount; index++) {
CreatedRow.call(this, this.context);
} return this.context;
};
Table.prototype.GetRowCount = function () {
return this.rowCount;
};
Table.prototype.GetColumnCount = function () {
return this.columnCount;
};
Table.prototype.AddRow = function () {
var tr = CreatedRow.call(this, this.context);
if (this.rowHeight)
tr.css("height", this.rowHeight); this.rowCount++;
return tr;
};
Table.prototype.AddColumn = function () {
var rows = $(this.context).children().children();
for (var index = 0; index < rows.length; index++) {
CreateTd.call(this, $(rows[index]));
}
this.columnCount++;
};
Table.prototype.RemoveRow = function (row) {
$(row).remove();
this.rowCount--;
return $(row);
}
Table.prototype.RemoveColumn = function (column) {
var tds = $(column).parent().children();
var columnIndex = GetColumnIndex(tds, column);
var rows = this.context.children().children()
for (var index = 0; index < rows.length; index++) {
var tr = rows[index];
var tdIndex = GetTdIndex(tr, columnIndex);
var td = $(tr).children()[tdIndex];
if (parseInt($(td).attr("colspan") || 1) > 1) {
$(td).attr("colspan", parseInt($(td).attr("colspan") - 1));
} else {
$(td).remove();
}
}
this.columnCount--;
}
Table.prototype.MergeColumns = function (column, value) {
value = parseInt(value);
if (value <= 0) {
throw "列数必须大于0!";
return;
} var tds = $(column).nextAll('td');
if (value > tds.length) value = tds.length;
var colspan = parseInt($(column).attr("colspan") || 1); for (var index = 0; index < value; index++) {
colspan += parseInt($(tds[index]).attr("colspan") || 1);
$(tds[index]).remove();
} $(column).attr("colspan", colspan);
}
Table.prototype.SplitColumn = function (column, value) {
value = parseInt(value);
if (value <= 0) {
throw "列数必须大于0!";
return;
}
var colspan = parseInt($(column).attr("colspan") || 1); if (colspan <= 1) {
throw "不能拆分单元格!";
return;
} if (value > colspan) {
throw "输入数字无效!";
return;
} $(column).attr("colspan", colspan - parseInt(value) + 1);
var tr = $(column).parent();
for (var index = 0; index < value - 1; index++) {
CreateTd.call(this,tr);
}
}
Table.prototype.AddRowFrom = function (row, position) {
var tr = CreatedRow();
for (var index = 0; index < this.columnCount; index++) {
CreateTd(tr);
}
switch (position) {
case "north":
$(row).before(tr);
break;
case "south":
$(row).after(tr);
break;
default:
$(row).after(tr);
break;
}
this.rowCount++;
return tr;
}
Table.prototype.AddColumnFrom = function (column, position) {
var columnIndex = GetColumnIndex($(column).parent().children(), column);
if (columnIndex < 0) {
throw "获取当前列失败!";
return;
}
var rows = this.context.children().children();
for (var index = 0; index < rows.length; index++) {
row = rows[index];
var td = CreateTd();
var tdIndex = GetTdIndex(row, columnIndex);
switch (position) {
case "west":
$($(row).children()[tdIndex]).before(td);
break;
case "east":
$($(row).children()[tdIndex]).after(td);
break;
default:
$($(row).children()[tdIndex]).after(td);
break;
}
}
this.columnCount++;
} function CreatedRow(target) {
var tr;
if (this.rowCss)
tr = $("<tr class='" + this.rowCss + "'></tr>");
else
tr = $("<tr></tr>"); if (target) {
tr.appendTo(target);
} for (var index = 0; index < this.columnCount; index++) {
CreateTd.call(this, tr);
} if ($.isFunction(this.onTrMouseDown))
tr.bind("mousedown ", this.onTrMouseDown); if ($.isFunction(this.onTrCreated))
this.onTrCreated.call(tr); return tr;
}; function CreateTd(target) {
var td;
if (this.columnCss)
td = $("<td class='" + this.columnCss + "'></td>");
else
td = $("<td></td>"); if (target) {
td.appendTo(target);
} if ($.isFunction(this.onTdMouseDown))
td.bind("mousedown ", this.onTdMouseDown); if ($.isFunction(this.onTdCreated))
this.onTdCreated.call(td); return td;
} function GetColumnIndex(tds, td) {
var tdIndex = $.inArray(td, tds);
var columnIndex = 0;
for (var index = 0; index <= tdIndex; index++) {
columnIndex += parseInt($(tds[index]).attr("colspan") || 1);
}
return columnIndex;
} function GetTdIndex(tr, columnIndex) {
var tds = $(tr).children();
var ColumnIndex = 0;
for (var index = 0; index < tds.length; index++) {
ColumnIndex += parseInt($(tds[index]).attr("colspan") || 1);
if (ColumnIndex >= columnIndex)
return index;
}
}
}());
最近自己封装了个JS脚本,用来创建和操作Table的更多相关文章
- (转)优化js脚本设计,防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们先来看一下浏览器的内 ...
- 优化js脚本设计,防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出"脚本运行时间过长"的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们 ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 自动化测试中执行JS脚本方法封装
执行JS脚本方法封装: class JavaScript(Base): def execute_javascript(self, js): """执行 JavaScrip ...
- ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)
(1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用. 由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...
- Octopus系列之如何让前台的js脚本变得灵活重用
Octopus系列如何让前台的js脚本变得灵活,重用 方式1:ajax方式 方式2:form表单方式 面向对象的脚本封装 jQuery的封装 做Web开发的少不了前台Ajax的使用, 返回true:f ...
- JS脚本动态给元素/控件添加事件
最近突然要用到JS脚本动态给元素添加事件.如TextBox的onclick事件.但有的onclick事件原先已经定义了相应代码!这里又不能替代原有方法,而JS脚本里面有个方法可以给控件在原有事件的基础 ...
- Firebug中调试中的js脚本中中文内容显示为乱码
Firebug中调试中的js脚本中中文内容显示为乱码 设置 页面 UFT-8 编码没用, 解决方法:点击 "Firebug"工具栏 中的"选项"---" ...
随机推荐
- Unreal Engine 4 一些小技巧或提示
怎样获取当前地图的名字 在任意Actor类里,GetWorld()->GetName()就可以获得当前地图的名字
- ASP.NET 生命周期 简介
当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页面处理程序类后,ASP.NET 运行时 ...
- Mono登录界面记住密码的控件
<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_co ...
- Python-0 简述
#1 应用广泛: 豆瓣 youtube 云存储相关 #2 初步学习内容:
- (转)发布Silverlight+WCF程序到IIS后,客户端访问数据库失败的解决方案
转自url:http://greatverve.cnblogs.com/archive/2011/11/30/silverlight-wcf-pub.html 我们在编写Silverlight程序时, ...
- 前端学习实践笔记--JavaScript深入【2】
趁热继续再来学习一波,接下来主要介绍函数,object,数组,面向对象,new实例化. 在介绍“对象”之前,首先得梳妆打扮一番吧,那这梳妆打扮主要有两条路线,一条是淑女范(利用函数对象化),一条是邻家 ...
- android-----test------模拟来电提醒和短信提醒
为了测试应用是否能处理来电提醒和短信提醒时正常处理,我们需要做个测试,怎么模拟来电提醒和短信提醒呢?? 采用Telnet 命令来模拟. 1.首先看看Telnet 命令是否可以使用,如果不可以使用,则需 ...
- redis和memcached缓存
memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...
- 40、dom以xml结尾的文件
1.student.xml文件 <?xml version="1.0" encoding="utf-8" ?> <!-- 1.书写根元素(因为 ...
- XidianOJ 1041: Franky的游戏O
题目描述 Franky是super的人造人,来到了n*m的棋盘世界玩冒险游戏. n×m的棋盘由n行每行m个方格组成,左上角的方格坐标是(0,0),右下角的方格坐标是(n-1,m-1). 每次游戏时,他 ...