///  
///  
//引入DataBinder.js 
include("DataBinder.js"); 
/* 
*/ function Table(){ this.elmTable=null; //表格标签 this.templetRow=null; //模板行 this.displayBody=null; //显示区tbody标签 this.isOverChange=false; //鼠标移过时,是否改变颜色 this.hoverColor="#EBF3FD"; //鼠标移过颜色 this.isActiveChange=false; //行点击时,是否改变颜色 this.activeColor="#D9E8FB"; //行点击时颜色 this.activeRow=null; //当前活动行 } Table.prototype = { //设置鼠标移过时,是否改变颜色 SetOverChange: function(bOverChange) { this.isOverChange = bOverChange; }, //设置行点击时,是否改变颜色 SetActiveChange: function(bActiveChange) { this.isActiveChange = bActiveChange; }, //绑定表格对象 BindElement: function(elm) { this.elmTable = elm; Event.observe(this.elmTable, "mouseover", this.onMouseOver.bindAsEventListener(this)); Event.observe(this.elmTable, "mouseout", this.onMouseOut.bindAsEventListener(this)); Event.observe(this.elmTable, "click", this.onMouseClick.bindAsEventListener(this)); var tbody = this.elmTable.tBodies[0]; //取其第一个tbody为模板 this.templetRow = tbody.rows[0]; //取该tbody中的第一行为模板 this.elmTable.removeChild(tbody); this.displayBody = document.createElement("TBODY"); //创建显示区tbody this.elmTable.appendChild(this.displayBody); //添加到表格中 }, //绑定表格的ID BindID: function(id) { var elm = document.getElementById(id); this.BindElement(elm); }, _getEventRow: function(evn) { var elm = Event.element(evn); if (elm == this.elmTable) return null; while (elm.tagName.toLowerCase() != "tr") { elm = elm.parentNode; if (elm == this.elmTable || elm == null) return null; } if (elm.parentNode != this.displayBody) return null; return elm; }, //鼠标移过时事件响应 onMouseOver: function(evn) { var row = this._getEventRow(evn); if (!row) return; if (this.isOverChange) { row.style.backgroundColor = this.hoverColor; //改变颜色 } }, //鼠标移出时事件响应 onMouseOut: function(evn) { var row = this._getEventRow(evn); if (!row) return; if (this.isOverChange) { if (row == this.activeRow) { //如果当前行是活动行,设置活为动行颜色 row.style.backgroundColor = this.activeColor; } else { //设置为模板行颜色 row.style.backgroundColor = row.backgroundColor; } } }, //行点击事件响应 onMouseClick: function(evn) { var row = this._getEventRow(evn); if (!row) return; if (this.isActiveChange) { if (this.activeRow != null) { //恢复原活动行颜色 this.activeRow.style.backgroundColor = this.activeRow.backgroundColor; } //设置活动行颜色 row.style.backgroundColor = this.activeColor; //设置当前行为活动行 this.activeRow = row; } }, //新增一行,该行结构与模板行一致 NewRow: function(bAdd) { var _this = this; var newRow = this.templetRow.cloneNode(true); //将模板行进行深层拷贝 newRow.backgroundColor = newRow.style.backgroundColor; //添加到表格显示区中 if (bAdd == true || bAdd == null) { this.displayBody.appendChild(newRow); } return newRow; //返回新行 }, //取得所有行 GetRows: function() { return this.displayBody.rows; }, //清空所有行 Clear: function() { var newTbody = document.createElement("TBODY"); this.elmTable.replaceChild(newTbody, this.displayBody); this.displayBody = newTbody; }, //删除一行 DeleteRow: function(row) { this.elmTable.deleteRow(row.rowIndex); if (row == this.activeRow) { this.activeRow = null; } }, //以下标为参数,删除一行 DeleteAt: function(index) { this.displayBody.deleteRow(index); var rows = this.GetRows(); if (rows[index] == this.activeRow) { this.activeRow = null; } }, //添加一行 AddRow: function(row) { this.displayBody.appendChild(row); }, onBinding: function(row) { }, // 数据绑定 BindData: function(dataSource, mapList) { var _this = this; this.Clear(); this.repeater = new Repeater(); this.repeater.setMapList(mapList); this.repeater.defaultCreateItem = function() { var row = _this.NewRow(false); return row; }; this.repeater.setDataList(dataSource); this.repeater.setContainer(this.displayBody); this.repeater.Bind(); } };
使用示例代码:
 
 
 
姓名 性别 年龄 操作
保存 查看

手动产生数据的例子,该例如果要实现以上动态编辑、数据保存的功能的话,则还要添加更多的代码才能实现,一般不推荐使用这种方法
 
 
 
姓名 性别 年龄 操作
查看

动态表格Table类的实现的更多相关文章

  1. 动态表格Table类的实现

    文件名:Table.js本文件依赖于 prototype.js,prototype_ext.js,Lib.js,DataBinder.js这些文件请参看我的其它文章

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部