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 相关文章推荐
JS查看对象功能代码
Apr 25 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
Apr 23 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 Javascript
由浅入深剖析Angular表单验证
Jul 14 Javascript
15位和18位身份证JS校验的简单实例
Jul 18 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
Node在Controller层进行数据校验的过程详解
Aug 28 Javascript
vue首次渲染全过程
Apr 21 Vue.js
微信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输出时间格式
2013/08/31 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
记录Django开发心得
2014/07/16 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
zookeeper python接口实例详解
2018/01/18 Python
Python之reload流程实例代码解析
2018/01/29 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
就业协议书盖章的注意事项
2014/09/28 职场文书
医者仁心观后感
2015/06/17 职场文书
民主生活会主持词
2015/07/01 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript