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 相关文章推荐
JavaScript prototype属性使用说明
May 13 Javascript
seajs1.3.0源码解析之module依赖有序加载
Nov 07 Javascript
js document.write()使用介绍
Feb 21 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
Jun 12 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
你应该知道的几类npm依赖包管理详解
Oct 06 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
element的el-table中记录滚动条位置的示例代码
Nov 06 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 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
smarty section简介与用法分析
2008/10/03 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
Python 描述符(Descriptor)入门
2016/11/20 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
python可以用哪些数据库
2020/06/22 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
关于python中remove的一些坑小结
2021/01/04 Python
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
情人节活动总结范文
2015/02/05 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
解决MySQL报“too many connections“错误
2022/04/19 MySQL