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 相关文章推荐
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
Dec 01 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 Javascript
如何解决jQuery 和其他JS库的冲突
Jun 22 jQuery
VUE使用axios调用后台API接口的方法
Aug 03 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
微信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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
DWR Ext 加载数据
2009/03/22 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Python魔法方法功能与用法简介
2019/04/04 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
关键字throw与throws的用法差异
2016/11/22 面试题
机械设计及其自动化求职推荐信
2014/02/17 职场文书
2014年基建工作总结
2014/12/12 职场文书