HTML Table 空白单元格补全的简单实现


Posted in Javascript onOctober 13, 2016

在最初自学 Web 开发的时候,那时没有所谓的 DIV/CSS 布局,一概 Table 布局的天下。当时有个问题就来了,如何补全宫格空白的单元格呢?——这是我在弄公司产品页头痛的问题。因为我不是学程序出身的,碰到这稍带算法的问题,就束手无策了,呵呵。顺带说说,记得分页的算法还折腾了我一下呢。

所谓宫格,就是说表格,3 行x 4 列 = 共12 单元格。如果只有 10 个产品,就只能填充表格 10 个单元格,其余的为空白。虽然空白,但也要渲染 <td></td> 元素,不然 table 会看起来会走样。写死当然可以,但问题 table 都是经过 ASP 动态渲染的。所以怎么计算,怎么该显示空白 td 就是个问题。我当时想了几个方法,回想起来很当然很不是合理,总之都是死马当活马医……能显示就行……呵呵。

后来到了 DIV/CSS 时代,Table 遭弃用。于是该算法也没关心了。——再后来一次项目中,发现 table 布局仍然适用的,于是就琢磨了一下这小问题。用 JS 动态控制的代码如下:

/**
 * @class renderTable
 * 输入一个数组 和 列数,生成一个表格 table 的 markup。
 * @param {Array} list
 * @param {Number} cols
 * @param {Function} getValue
 */
define(function(require, exports, module) {
	module.exports = function (list, cols, getValue){
		this.list = list;
		this.cols = cols || 5;
		
		this.getValue = getValue || this.getValue;
	}

	module.exports.prototype = (new function(){
		this.render = function(list){
			list = list || this.list;
			
			var len = list.length ;
			var cols = this.cols;// 位数
			var rows;
			var remainder = len % cols;
			var htmls = [];
				rows = len / remainder;
				
			if(remainder == 0){ // 可整除 无余数 直接处理
				list.forEach(addTr.bind({
					cols : cols,
					htmls: htmls,
					getValue : this.getValue
				}));
			}else{	// 处理余数部分
				var remainnerArr = list.splice(list.length - remainder);
				
				list.forEach(addTr.bind({
					cols : cols,
					htmls: htmls,
					getValue : this.getValue
				}));
			
				// 填空位
				var emptyArr = new Array(cols - remainnerArr.length);
				emptyArr = emptyArr.join('empty');
				emptyArr = emptyArr.split('empty');
				// 余数部分 + 空位
				remainnerArr = remainnerArr.concat(emptyArr);
				
				if(remainnerArr.length != cols){
					throw '最后一行长度错误!长度应该为' + cols;
				}
				remainnerArr.forEach(addTr.bind({
					cols : cols,
					htmls: htmls,
					getValue : this.getValue
				}));
			}
			
			
			return addTable(htmls.join(''));
		}
		
		/**
		 * 默认的获取显示值的函数。一般要覆盖该函数。
		 * @param {Mixed}
		 * @return {String}
		 */
		this.getValue = function(data){
			return data;
		}
	 	
		/**
		 * 为每个值加个 <td></td>。若满一行加一个 </tr></tr>
		 * @param {Mixed} item
		 * @param {Number} i
		 * @param {Array} arr
		 */
		function addTr(item, i, arr){
			var html = '<td>' + this.getValue(item) + '</td>';
			
			if(i == 0){
				html = '<tr>' + html;
			}else if((i + 1) % this.cols == 0 && i != 0){
				html += '</tr><tr>';
			}else if(i == arr.length){
				html += '</tr>';
			}
			
			this.htmls.push(html);
		}
		
		/**
		 * 
		 * @param {String} html
		 */
		function addTable(html){
			return '<table>' + html + '</table>';
	//		var table = document.createElement('table');
	//		table.innerHTML = html;
	//		table.border="1";
	//		document.body.appendChild(table);
		}
	});
});

 大大们可能觉得这可是一闪而过就有思路的问题……但我那时毕竟是在转行……稍有点“技术含量”的问题都成了我的拦路虎……

以上就是小编为大家带来的HTML Table 空白单元格补全的简单实现全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
thinkjs之页面跳转同步异步操作
Feb 05 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
vue中实现回车键登录功能
Feb 19 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 #Javascript
js给table赋值的实例代码
Oct 13 #Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 #Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 #Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 #Javascript
Node.js中常规的文件操作总结
Oct 13 #Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 #Javascript
You might like
php简单封装了一些常用JS操作
2007/02/25 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
python语言中有算法吗
2020/06/16 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
中国网上药店领导者:1药网
2017/02/16 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
什么是Web Service?
2012/07/25 面试题
护士实习生自我鉴定范文
2013/12/10 职场文书
人事部主管岗位职责
2013/12/26 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书