handsontable是一款页面端的表格式交互插件,可以通过她加载显示表格内容,能够支持合并项、统计、行列拖动等。

同时,支持对加载后的表格页面的处理:添加/删除行/列,合并单元格等操作。

我在项目中有用到了这款插件。

使用目的:实现报表配置功能中,对报表字段设定多表头信息,支持多表头的配置和修改。先给一个截图:

以下内容为handsontabel的基础用法步骤及说明。


一、引入handsontable的js和css文件。一个Demo(可以直接使用css和js)

二、基础应用

页面端放入一个div,用于绑定和展示handsontable数据

<div id="topFieldDiv" style="width: 100%; height: 100%; overflow-y: hidden;overflow-x: hidden"></div>

js内容部分如下:

 var $container = $("#topFieldDiv");
//判断div是否存在,若存在则删除
if ($container.length > 0) {
$container.remove();
}
//添加handsontable的div
$("#tbTopFieldJson").after("<div id=\"topFieldDiv\" style=\"width: 100%; height: " + window.innerHeight * 0.6 + "px; overflow-y: hidden;overflow-x: hidden;display:none \"></div>");
//#endregion $("#topFieldDiv").handsontable({
data: data,
colHeaders: colHeadArr,//设置列头
manualRowResize: true,//自定义行宽
manualColumnResize: true,//自定义列高
manualColumnMove: true,//是否能拖动列
//manualRowMove: false,//是否能拖动行
columnSorting: false,//false/对象 //当值为true时,表示启用排序插件
//rowHeaders: false,//是否显示行数字
contextMenu: true,//右键显示更多功能,
columns: cols,
autoColumnSize: true,
mergeCells: setmergeCells //加载合并项
}); //注释以下语句,改成上面的handsontable中直接去赋值data
//以下语句会造成:最后一个列在往前拖动过程中会消失(┬_┬)
$("#topFieldDiv").handsontable("loadData", data);//加载

这里需要对js部分做几点说明:

1、我这里承载handsontabel的div的ID为topFieldDiv,大家可以看到我是先判断该div是否存在,若存在会先删除,然后再添加div标签。从代码上看有点冗余、多此一举

这样做的原因为:在本项目中因为会涉及对当前表格多次编辑和修改,会历经几次交互过程,如果直接在原div上做再次的数据绑定,会出现绑定的列信息位置错乱,而首次加载是不会出现列信息错位的情况。

2、对已有div进行数据绑定,语法为:

    $("#topFieldDiv").handsontable({
colHeaders: colHeadArr,//设置列头
...
});

前期在网上查找相关案例,给出的案例均是全局变量方式,都是对全局的handsontabel变量做操作,而本项目不希望以全局方式来交互,故采用了以上方式来加载表格。

全局方式语法如下

var container = $("#topFieldDiv");
var hot = new Handsontable(container, {
data: data,
colHeaders: ['日期', '地点', '商品', '单价'], // 使用自定义列头
manualRowResize: true,//自定义行宽
manualColumnResize: true,//自定义列高
...
}); //使用hot
var data = hot.getData();
var s = hot.getColHeader();
//var cols = hot.getDataAtProp("name");
var ce = hot.getDataAtRowProp(3, "id");

3、handsontabel数据交互

    var $container = $("#topFieldDiv");
var handsontable = $container.data('handsontable');//获取当前handsontable var data = handsontable.getData();//获取所有值
var mergeCellArr = handsontable.mergeCells.mergedCellInfoCollection;//获取合并项目
var colHeadArr = handsontable.getColHeader();//获取表头集合

4、handsontabel部分属性说明

    $("#topFieldDiv").handsontable({
data: data,//为需要绑定数据集合
colHeaders: colHeadArr,//设置列头显示-集合,格式:['日期', '地点', '商品', '单价']
manualRowResize: true,//自定义行宽
manualColumnResize: true,//自定义列高
manualColumnMove: true,//是否能拖动列
//manualRowMove: false,//是否能拖动行
columnSorting: false,//当值为true时,表示启用排序插件
//rowHeaders: false,//是否显示行数字
contextMenu: true,//右键显示更多功能,
columns: cols,//设置表格列头。格式[{data:"列1"},{data:"列2"}...]
autoColumnSize: true,
mergeCells: setmergeCells //加载合并项。注意:集合变量名取名不能和属性名mergeCells一致
});

5、单独绑定handsontabel的数据data

$("#topFieldDiv").handsontable("loadData", data);//加载

不建议使用loadData方式来进行表格赋值,因为这样会出现一个问题:在进行列位置拖动时,如果被拖动的列是末尾列,则在把末尾列向前面列拖动后,会出现被拖动的末尾列消失情况

三、用到的handsontabel参考网址

以下网址中,部分内容会有些错误,主要是在参考他们的写法和一些属性、方法文档

爱吃西红柿

handsontable常规配置的中文API

handsontable 合并单元格

风火一回

Handsontable 学习笔记-Methods

jQuery仿Excel表格编辑功能的实现代码

jquery.handsontable 获取编辑后的数据

handsontable 属性汇总

handsontable的基础应用的更多相关文章

  1. Handsontable添加超链接

    本文在上文的基础上,返回的数据中多了一个link超链接跳转的字段,,需要在Handsontable中显示超链接. <!DOCTYPE html> <html> <head ...

  2. handsontable 排序问题

    排序是表格的基础功能,handsontable也会支持. 有时需求会很复杂,需要自定义排序,或者调用其他排序方法:自定义排序,比较复杂,没做过:今天要用的是调用R中的排序方法. 有两个事件before ...

  3. handsontable 问题

    碰到问题了,去官网上找community:http://docs.handsontable.com/0.16.1/tutorial-quick-start.html 1. 描述:把handson ta ...

  4. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  5. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  8. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  9. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

随机推荐

  1. Jdk1.8中的HashMap实现原理

    HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. HashM ...

  2. 超级简单!把文档转换成网页格式(Core)

    因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...

  3. 一个比Spring Boot快44倍的Java框架!

    最近栈长看到一个框架,官方号称可以比 Spring Boot 快 44 倍,居然这么牛逼,有这么神奇吗?今天带大家来认识一下. 这个框架名叫:light-4j. 官网简介:A fast, lightw ...

  4. Linux知识要点(文件压缩打包解压缩)

    tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询啰! 其实最简单的使用 tar 就只要记忆底下的方式即可(gzip方式): 压 缩: tar -zcvf ...

  5. Django rest framework源码分析(1)----认证

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  6. 使用chan的时候选择对象还是指针

    使用chan的时候选择对象还是指针 今天在写代码的时候遇到一个问题,在创建一个通道的时候,不确定创建的通道是使用chan A还是chan *A. 思考了一下,觉得这个应该和函数一样是一个值传递还是参数 ...

  7. .Net Webapi SignalR与微信小程序的交互

    .Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...

  8. .NET Core微服务之基于Ocelot实现API网关服务

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端 ...

  9. SpringBoot进阶教程(二十二)集成RabbitMQ---MQ实战演练

    RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.RabbitMQ是流行的开源消息队列系统,用erlang语言开发.Rab ...

  10. 基于Twitter的Snowflake算法实现分布式高效有序ID生产黑科技(无懈可击)

    参考美团文档:https://tech.meituan.com/2017/04/21/mt-leaf.html Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万 ...