摘要:原文發(fā)布于個(gè)人博客歡迎訪問(wèn)簡(jiǎn)介是一個(gè)類似表格編輯器,支持豐富的展現(xiàn)和交互,以及多樣的單元格展現(xiàn)和配置核心由原生編寫,通過(guò)打包同類項(xiàng)目中,點(diǎn)贊最多,列表官網(wǎng)地址支持的特征的一些主要功能這里只列出主要功能,想了解更多更能,可以查詢官方文檔。這
原文發(fā)布于個(gè)人博客>>歡迎訪問(wèn)
HandsonTable 簡(jiǎn)介
Handsontable 是一個(gè)類似 excel 表格編輯器,支持豐富的展現(xiàn)和交互,以及多樣的單元格展現(xiàn)和配置
核心由原生 js (es6) 編寫,通過(guò)webpack打包
同類 Jspreadsheets 項(xiàng)目中,點(diǎn)贊最多,Jspreadsheets列表
官網(wǎng)地址
HandsonTable 支持的特征
Handsontable 的一些主要功能:
edit
Context menu
Drag-down
Dropdown
Freezing
Merge cells
Comments
Data validation
Custom HTML
sortingtable
這里只列出主要功能,想了解更多更能,可以查詢官方文檔。這里附一張官方demo圖:
如何實(shí)現(xiàn)一個(gè)handsontableHandsontable 的核心可以分為配置,事件,方法三個(gè)方面:
配置引入handsontable包,
new 一個(gè) Handsontable 實(shí)例
// 新建Hansontable實(shí)例 var container = document.getElementById("dataGrid"); var hot = new Handsontable(container, options); // options 如下
// Handsontable 的一些主要配置 var options = { data: Array || Object, // data 是整個(gè)表格的數(shù)據(jù)源,可以接收一個(gè)二維數(shù)組,或者一個(gè)對(duì)象 rowHeaders: Boolean || Array || function, colHeaders: Boolean || Array || function, cells: function, // row, col, prop stretchH: String, // "all", "none", "last", columns: Array || function, columnSorting: Boolean || Object, manualColumnResize: true, renderer: function, }
然后說(shuō)一下上面每一個(gè)配置項(xiàng)的用法:
data
data 是整個(gè)表格的數(shù)據(jù)源,可以接收一個(gè)二維數(shù)組,或者一個(gè)對(duì)象
// 作為數(shù)組 data = [ ["", "Kia", "Nissan", "Toyota", "Honda", "Mazda", "Ford"], ["2012", 10, 11, 12, 13, 15, 16], ["2013", 10, 11, 12, 13, 15, 16], ["2014", 10, 11, 12, 13, 15, 16], ["2015", 10, 11, 12, 13, 15, 16], ["2016", 10, 11, 12, 13, 15, 16] ]; // 相應(yīng)配置(每一列顯示哪些數(shù)據(jù)由columns決定) new Handsontable(container, { data: data, colHeaders: true, columns: [ {data: 0}, {data: 2}, {data: 3}, {data: 4}, {data: 5}, {data: 6} ] }); // 作為對(duì)象數(shù)據(jù) data = [ {id: 1, name: "Ted Right", address: ""}, {id: 2, name: "Frank Honest", address: ""}, {id: 3, name: "Joan Well", address: ""}, {id: 4, name: "Gail Polite", address: ""}, {id: 5, name: "Michael Fair", address: ""}, ]; new Handsontable(container5, { data: data, colHeaders: true, columns: [ {data: "id"}, {data: "name"}, {data: "address"} ], });
rowHeaders
rowHeaders屬性用來(lái)設(shè)置表格每一行的標(biāo)題,有三種形式:
// 若為 true, 則行標(biāo)題從1開始,依次往后 { rowHeaders: true, } // 設(shè)置為數(shù)組, 則按數(shù)組內(nèi)容顯示 { rowHeader: [1, 2, 3, 4, 5] } // 函數(shù),接收一個(gè)index參數(shù),更加靈活 { rowHeader: function(index) { return index + "AB"; } }
cells
cells屬性用來(lái)設(shè)置每個(gè)單元格的屬性
// 設(shè)置第一列只讀 { cells: function (row, col, prop) { var cellProperties = {}; if (col === 0) { cellProperties.readOnly = true; } return cellProperties; } }
stretchH
stretchH 屬性用來(lái)設(shè)置表格的展開方式,all 全列按最大寬度展開; none 緊縮的表格; last 最后一列展開
{ stretchH: "all" // all 全列按最大寬度展開; none 緊縮的表格; last 最后一列展開 }
columns
columns屬性,用來(lái)定義列屬性,也就是每一列需要顯示數(shù)據(jù)源的哪個(gè)屬性。除此之外,也可以定義每一列的數(shù)據(jù)屬性,
{ columns: [ {data: "id"}, // 第一列顯示 id 屬性 {data: "name"}, // 第二列顯示 name 屬性 {data: "age", type: "numeric"}, // 第三列顯示 age 屬性,并且只能填數(shù)字 {data: "address"} // 第四列顯示 address 屬性 ], }
columnSorting
columnSorting 用來(lái)設(shè)置表格的列是否可排序,
renderer
renderer 屬性可以自定義單元格的各種屬性
// 第三行有數(shù)據(jù)的單元格涂色 { renderer: function (instance, td, row, col, prop, value, cellProperties) { // 渲染為text類型,可選的有TimeRenderer、PasswordRenderer等不同的類型 Handsontable.renderers.TextRenderer.apply(this, arguments); // 判斷條件 if (value && row === 2) { td.style.backgroundColor = "#e0ecff"; } } }事件
生成 Handsontable 實(shí)例之后,一張表格就顯示好了,如果想加入更多交互效果,就需要注冊(cè)監(jiān)聽事件。
// 實(shí)例對(duì)象 var hot = new Handsontable(container, options); // 用實(shí)例方法addHook注冊(cè)事件 hot.addHook(key, callback); // key 為事件名 // 除了addHook 方法之外,也可以將事件名,寫入配置中 { afterChange: function (change) {} }常用事件
afterChange
afterChange 在單元格改變時(shí)觸發(fā),如編輯單元格之后,接收兩個(gè)參數(shù)changeData, source
hot.addHook("afterChange", function (changeData, source) { // changeData 是一個(gè)數(shù)組,第一個(gè)元素(數(shù)組),記錄所有修改信息 if (!changeData) return; var change = changeData[0], row = change[0], colProp = change[1], preData = change[2], newData = change[3]; })
afterOnCellMouseDown
afterOnCellMouseDown 在鼠標(biāo)點(diǎn)擊單元格之后觸發(fā)
// afterOnCellMouseDown 在鼠標(biāo)點(diǎn)擊單元格之后觸發(fā),接收兩個(gè)參數(shù) event cellCoords // event 標(biāo)準(zhǔn)鼠標(biāo)點(diǎn)擊事件 // cellCoords 對(duì)象,保存row,col信息 hot.addHook("afterOnCellMouseDown ", function (event, cellCoords) { var row = cellCoords.row, col = cellCoords.col; })
afterBeginEditing
afterBeginEditing 在單元格開始編輯時(shí)觸發(fā)
hot.addHook("afterBeginEditing", function (row, col) {})方法
getCell
getCell(row, col) 獲取指定單元格
alter
alter(action, index, amount, source, keepEmptyRows) alter方法用于改變表格結(jié)構(gòu),即插入或刪除行列數(shù)據(jù)。
action 可用改變表格結(jié)構(gòu)操作insert_row、insert_col、remove_row、remove_col
index行列索引值,從0開始,insert操作將插入到該索引值的前一行/列
amount(可選,默認(rèn)1):將要插入/刪除的行列數(shù)
source(可選):行或列對(duì)象
keepEmptyRows(可選):防止刪除空行,true/false
setDataAtCell
setDataAtCell(row, col, value, source) 設(shè)置某個(gè)單元格的數(shù)據(jù)
row 行號(hào)索引
col 列號(hào)索引
value 將要設(shè)置的單元格數(shù)據(jù)
source (可選)字符串標(biāo)識(shí)中描述這一變化將如何改變數(shù)組(用于onAfterChange或onBeforeChange回調(diào))
如下代碼所示,生成的表格主體在ht_master中,rowHeader、colHeader 和freezingCol會(huì)clone主體部分內(nèi)容,放在其兄弟節(jié)點(diǎn)。同時(shí),edit時(shí)的input會(huì)生成唯一一個(gè)textarea。
原文發(fā)布于個(gè)人博客>>歡迎訪問(wèn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/84202.html
摘要:原文發(fā)布于個(gè)人博客歡迎訪問(wèn)簡(jiǎn)介是一個(gè)類似表格編輯器,支持豐富的展現(xiàn)和交互,以及多樣的單元格展現(xiàn)和配置核心由原生編寫,通過(guò)打包同類項(xiàng)目中,點(diǎn)贊最多,列表官網(wǎng)地址支持的特征的一些主要功能這里只列出主要功能,想了解更多更能,可以查詢官方文檔。這 原文發(fā)布于個(gè)人博客>>歡迎訪問(wèn) HandsonTable 簡(jiǎn)介 Handsontable 是一個(gè)類似 excel 表格編輯器,支持豐富的展現(xiàn)和交互...
摘要:生成報(bào)表數(shù)據(jù)都處理完了之后,就是生成報(bào)表了,報(bào)表這里稍微做的靈活了一點(diǎn),是要讓用戶根據(jù)上傳的數(shù)據(jù),自己選擇字段,然后用去生成對(duì)應(yīng)的報(bào)表。 js-xlsx + handsontable + echarts 實(shí)現(xiàn)在前端導(dǎo)入excel數(shù)據(jù)并生成echart報(bào)表 前言 最近都在做類似 ERP 的項(xiàng)目,所以呢,又碰到一個(gè)比較變態(tài)的需求(至少對(duì)我來(lái)說(shuō)是),在前端導(dǎo)入 excel 文件,然后在瀏覽器...
摘要:待更新左上角單元格賦值問(wèn)題,通過(guò)改源碼實(shí)現(xiàn)。下拉單元格高度修改,定位元素修改時(shí)下拉列表的最后一個(gè)顯示不全,有。 hansontable簡(jiǎn)介 是一個(gè)在線類似Excel的表格編輯器,支持豐富的展現(xiàn)和交互,有多樣的單元格類型供配置。 核心是由原生JavaScript構(gòu)建,充分模塊化,支持自定義build。 除了核心表格渲染(實(shí)質(zhì)就是js操作table,計(jì)算元素位置,自定義綁定事件處理),大部...
摘要:待更新左上角單元格賦值問(wèn)題,通過(guò)改源碼實(shí)現(xiàn)。下拉單元格高度修改,定位元素修改時(shí)下拉列表的最后一個(gè)顯示不全,有。 hansontable簡(jiǎn)介 是一個(gè)在線類似Excel的表格編輯器,支持豐富的展現(xiàn)和交互,有多樣的單元格類型供配置。 核心是由原生JavaScript構(gòu)建,充分模塊化,支持自定義build。 除了核心表格渲染(實(shí)質(zhì)就是js操作table,計(jì)算元素位置,自定義綁定事件處理),大部...
摘要:分享獨(dú)立開發(fā)產(chǎn)品變現(xiàn)相關(guān)有價(jià)值的內(nèi)容,每周五發(fā)布。團(tuán)隊(duì)認(rèn)為做網(wǎng)站評(píng)論和與其它團(tuán)隊(duì)的協(xié)作是復(fù)雜的,對(duì)于這個(gè)過(guò)程沒有真正的解決方案。官網(wǎng)實(shí)現(xiàn)美金收入的步驟個(gè)月前,我創(chuàng)建了自己的第一個(gè)賬戶,年月日。當(dāng)我把它放到上時(shí),得到了一些最初的關(guān)注。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size...
閱讀 2228·2021-10-14 09:43
閱讀 2257·2019-08-30 15:55
閱讀 787·2019-08-30 14:23
閱讀 2074·2019-08-30 13:21
閱讀 1289·2019-08-30 12:50
閱讀 2248·2019-08-29 18:46
閱讀 2340·2019-08-29 17:28
閱讀 2430·2019-08-29 17:21