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 Distilled 基础知识与函数
Apr 07 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
jquery获得页面元素的坐标值实现思路及代码
Apr 15 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
Apr 12 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
vue路由插件之vue-route
Jun 13 Javascript
node.js 如何监视文件变化
Sep 01 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
岳父生日宴会答谢词
2014/01/13 职场文书
创业资金计划书
2014/02/06 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
python基础之错误和异常处理
2021/10/24 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server