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 相关文章推荐
node在两个div之间移动,用ztree实现
Mar 06 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
Mar 19 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
May 04 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
jQuery实现渐变下拉菜单的简单方法
Mar 11 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
Angular排序实例详解
Jun 28 Javascript
Js经典案例的实例代码
May 10 Javascript
小程序云开发实现数据库异步操作同步化
May 18 Javascript
vue实现公共方法抽离
Jul 31 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实现rc4加密算法代码
2012/04/25 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php英文单词统计器
2016/06/23 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
Python实现批量压缩图片
2018/01/25 Python
Python的几种主动结束程序方式
2019/11/22 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
金宝贝童装官网:Gymboree
2016/08/31 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
贺卡寄语大全
2014/04/11 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
酒店厨房管理制度
2015/08/06 职场文书
情况说明书怎么写
2015/10/08 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python