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 相关文章推荐
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 Javascript
javascript实现列表切换效果
May 02 Javascript
BootStrap的Datepicker控件使用心得分享
May 25 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
Dec 21 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
js DOM的事件常见操作实例详解
Dec 16 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
php中序列化与反序列化详解
2017/02/13 PHP
jQuery 选择器理解
2010/03/16 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
JS 表单验证大全
2011/11/23 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
js opener的使用详解
2014/01/11 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
vuex的简单使用教程
2018/02/02 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
PyQt5实现简易电子词典
2019/06/25 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
大学自我鉴定
2013/12/20 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
十八大观后感
2015/06/12 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
上班旷工检讨书
2015/08/15 职场文书
高二英语教学反思
2016/03/03 职场文书