不到30行JS代码实现Excel表格的方法


Posted in Javascript onNovember 15, 2014

本文实例讲述了不到30行JS代码实现Excel表格的方法,可见jQuery并非不可替代。分享给大家供大家参考。具体分析如下:

某国外程序员展示了一个由原生JS写成不依赖第三方库的,Excel表格应用,有以下特性:

① 由不足30行的原生JavaScript代码实现
② 不依赖第三方库
③ Excel风格的语义分析 (公式以 "=" 开头)
④ 支持任意表达式 (=A1+B2*C3)
⑤ 防止循环引用
⑥ 基于localStorage的自动本地持久化存储

效果展示如下图所示:

不到30行JS代码实现Excel表格的方法

代码分析:

CSS略,HTML核心仅一行:

<table></table>

JavaScript代码如下:

for (var i=0; i<6; i++) {

    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) {} });

})();

其实通过上文我们可以看出最核心的几步使用了EMEAScript5和HTML5的特性, 如:

querySelectorAll: 提供类似jQuery选择器的查询,由此可见,第三方JS库如jQuery并不是必不少的。

var matches = document.querySelectorAll("div.note, div.alert");

defineProperty 提供了类以Java的get,set访问/设置预处理方法,还有其他一些配置属性,如:是否可配置,可枚举等。

Object.defineProperty(o, "b", {get : function(){ return bValue; },

                               set : function(newValue){ bValue = newValue; },

                               enumerable : true,

                               configurable : true});

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
js加入收藏以及使用Jquery更改透明度
Jan 26 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 Javascript
Bootstrap源码解读导航(6)
Dec 23 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 Javascript
js实现整体缩放页面适配移动端
Mar 31 Javascript
OpenLayers3实现对地图的基本操作
Sep 28 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 #Javascript
jquery中append()与appendto()用法分析
Nov 14 #Javascript
jQuery 插件开发指南
Nov 14 #Javascript
使用JavaScript和C#中获得referer
Nov 14 #Javascript
JavaScript window.location对象
Nov 14 #Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 #Javascript
详谈JavaScript内存泄漏
Nov 14 #Javascript
You might like
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
python中pass语句用法实例分析
2015/04/30 Python
Python中的日期时间处理详解
2016/11/17 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python正则表达式和元字符详解
2018/11/29 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
C语言基础笔试题
2013/04/27 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
护士求职推荐信范文
2013/11/23 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
临床专业自荐信
2014/06/22 职场文书
公司授权委托书样本
2014/09/15 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python