不到30行JS代碼實(shí)現(xiàn)Excel表格的方法
本文實(shí)例講述了不到30行JS代碼實(shí)現(xiàn)Excel表格的方法,可見(jiàn)jQuery并非不可替代。分享給大家供大家參考。具體分析如下:
某國(guó)外程序員展示了一個(gè)由原生JS寫(xiě)成不依賴第三方庫(kù)的,Excel表格應(yīng)用,有以下特性:
① 由不足30行的原生JavaScript代碼實(shí)現(xiàn)
② 不依賴第三方庫(kù)
③ Excel風(fēng)格的語(yǔ)義分析 (公式以 "=" 開(kāi)頭)
④ 支持任意表達(dá)式 (=A1+B2*C3)
⑤ 防止循環(huán)引用
⑥ 基于localStorage的自動(dòng)本地持久化存儲(chǔ)
效果展示如下圖所示:

代碼分析:
CSS略,HTML核心僅一行:
JavaScript代碼如下:
var row = document.querySelector("table").insertRow(-1);
for (var j=0; j<6; j++) {
var letter = String.fromCharCode("A".charCodeAt(0)+j-1);
row.insertCell(-1).innerHTML = i&&j ? "" : i||letter;
}
}
var DATA={}, INPUTS=[].slice.call(document.querySelectorAll("input"));
INPUTS.forEach(function(elm) {
elm.onfocus = function(e) {
e.target.value = localStorage[e.target.id] || "";
};
elm.onblur = function(e) {
localStorage[e.target.id] = e.target.value;
computeAll();
};
var getter = function() {
var value = localStorage[elm.id] || "";
if (value.charAt(0) == "=") {
with (DATA) return eval(value.substring(1));
} else { return isNaN(parseFloat(value)) ? value : parseFloat(value); }
};
Object.defineProperty(DATA, elm.id, {get:getter});
Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter});
});
(window.computeAll = function() {
INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
})();
其實(shí)通過(guò)上文我們可以看出最核心的幾步使用了EMEAScript5和HTML5的特性, 如:
querySelectorAll: 提供類似jQuery選擇器的查詢,由此可見(jiàn),第三方JS庫(kù)如jQuery并不是必不少的。
defineProperty 提供了類以Java的get,set訪問(wèn)/設(shè)置預(yù)處理方法,還有其他一些配置屬性,如:是否可配置,可枚舉等。
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
- Python讀取Json字典寫(xiě)入Excel表格的方法
- javascript將json格式數(shù)組下載為excel表格的方法
- Vue導(dǎo)出json數(shù)據(jù)到Excel電子表格的示例
- js導(dǎo)出Excel表格超出26位英文字符的解決方法ES6
- Java實(shí)現(xiàn)excel表格轉(zhuǎn)成json的方法
- JSP 導(dǎo)出Excel表格的實(shí)例
- Nodejs獲取網(wǎng)絡(luò)數(shù)據(jù)并生成Excel表格
- JS調(diào)用頁(yè)面表格導(dǎo)出excel示例代碼
- JavaScript將頁(yè)面表格導(dǎo)出為Excel的具體實(shí)現(xiàn)
- JavaScript實(shí)現(xiàn)Excel表格效果
相關(guān)文章
在webstorm開(kāi)發(fā)微信小程序之使用阿里自定義字體圖標(biāo)的方法
這篇文章主要介紹了在webstorm開(kāi)發(fā)微信小程序之使用阿里自定義字體圖標(biāo) 的相關(guān)資料,需要的朋友可以參考下2018-11-11
javascript禁止訪客復(fù)制網(wǎng)頁(yè)內(nèi)容的實(shí)現(xiàn)代碼
這篇文章主要介紹了javascript禁止訪客復(fù)制網(wǎng)頁(yè)內(nèi)容的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
JavaScript之underscore_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
JavaScript是函數(shù)式編程語(yǔ)言,支持高階函數(shù)和閉包。函數(shù)式編程非常強(qiáng)大,可以寫(xiě)出非常簡(jiǎn)潔的代碼。下面通過(guò)實(shí)例講解JavaScript之underscore的相關(guān)知識(shí),一起看看吧2017-07-07
Bootstrap 3 按鈕標(biāo)簽實(shí)例代碼
這篇文章主要介紹了Bootstrap 3 按鈕標(biāo)簽實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
微信小程序的開(kāi)發(fā)范式BeautyWe.js入門詳解
這篇文章主要介紹了微信小程序的開(kāi)發(fā)范式BeautyWe.js詳解,它是一套專注于微信小程序的企業(yè)級(jí)開(kāi)發(fā)范式,它的愿景是:讓企業(yè)級(jí)的微信小程序項(xiàng)目中的代碼,更加簡(jiǎn)單、漂亮,需要的朋友可以參考下2019-07-07
JavaScript實(shí)現(xiàn)AOP詳解(面向切面編程,裝飾者模式)
下面小編就為大家分享一篇JavaScript實(shí)現(xiàn)AOP的方法(面向切面編程,裝飾者模式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
JavaScript——DOM操作——Window.document對(duì)象詳解
下面小編就為大家?guī)?lái)一篇JavaScript——DOM操作——Window.document對(duì)象詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07

