基于JQuery封装的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的更多相关文章

  1. (转)优化js脚本设计,防止浏览器假死

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们先来看一下浏览器的内 ...

  2. 优化js脚本设计,防止浏览器假死

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出"脚本运行时间过长"的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们 ...

  3. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  4. 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  5. 自动化测试中执行JS脚本方法封装

    执行JS脚本方法封装: class JavaScript(Base): def execute_javascript(self, js): """执行 JavaScrip ...

  6. ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)

    (1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用.   由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...

  7. Octopus系列之如何让前台的js脚本变得灵活重用

    Octopus系列如何让前台的js脚本变得灵活,重用 方式1:ajax方式 方式2:form表单方式 面向对象的脚本封装 jQuery的封装 做Web开发的少不了前台Ajax的使用, 返回true:f ...

  8. JS脚本动态给元素/控件添加事件

    最近突然要用到JS脚本动态给元素添加事件.如TextBox的onclick事件.但有的onclick事件原先已经定义了相应代码!这里又不能替代原有方法,而JS脚本里面有个方法可以给控件在原有事件的基础 ...

  9. Firebug中调试中的js脚本中中文内容显示为乱码

    Firebug中调试中的js脚本中中文内容显示为乱码 设置 页面 UFT-8 编码没用, 解决方法:点击 "Firebug"工具栏 中的"选项"---" ...

随机推荐

  1. ExpressJs server中Router的设置

    expressjs的路由设置方法 一.基本方法: app.METHOD(PATH, HANDLER)把路径path和操作方法method(可以是http的get/put/delete等),映射到一个处 ...

  2. jquery高级函数

    .get() 将jq对象转成js $('#div1').get(0).innerHTML.text() 给标签添加文本 .detach() 和remove方法一样,但保留删除元素的所有行为$('div ...

  3. Js获取图片原始宽高

    如果我们页面看到的图片都是缩略图,那就需要做个图片点击放大效果,那么怎样获取图片的原始宽高呢?方法如下: //获取图片原始宽度 function getNaturalWidthAndHeight(im ...

  4. target,currentTarget和this三者的区别

    target在事件流的目标阶段:currentTarget在事件流的捕获,目标及冒泡阶段.只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的 ...

  5. nginx修改配置后不生效的问题

    nginx增加了新的server name配置,发现nginx -s reload之后总是不生效. http和https均可以打开页面,但是页面是别的server页面,使用的证书也是别的server的 ...

  6. Centos7上安装dnf-plugins-core

    为了在Centos上使用dnf copr命令,需要安装dnf-plugins-core,找了很长时间,包括试了源码编译安装都不行,最后找到了方法,执行下面的命令就可以了. 需要root权限 wget ...

  7. IDL中的HRESULT值

    IDL中的HRESULT值

  8. java 中 ArrayList LinkedList Vector 三者的异同点

    1.ArrayList和Vector都是基于数组实现的,所以查询速度很快,增加和删除(非最后一个节点)速度慢: Vector是线程安全的,ArrayList不是. 2.LinkedList 是一个双向 ...

  9. 磁盘阵列(RAID)实例

    raid技术分类可以分为基于软件raid技术和基于硬件raid技术 raid又分为raid-0.raid-1.raid-5和raid-10 Raid有”廉价磁盘冗余阵列”的意思,就是利用多块廉价的硬盘 ...

  10. HDOJ(2438)几何里的三分

    Turn the corner http://acm.hdu.edu.cn/showproblem.php?pid=2438 题目:一辆车能否在一个路口拐弯,看图就很明白啦. 算法:见下图,只要求出图 ...