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 相关文章推荐
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
AngularJS自定义控件实例详解
Dec 13 Javascript
关于axios如何全局注册浅析
Jan 14 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
Apr 26 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
交互式可视化js库gojs使用介绍及技巧
Feb 18 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缓存技术详细总结
2013/08/07 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
使用python模拟命令行终端的示例
2019/08/13 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
python 基于opencv操作摄像头
2020/12/24 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
经济系大学生求职信
2013/10/01 职场文书
销售行政专员职责
2014/01/03 职场文书
Python软件包安装的三种常见方法
2022/07/07 Python