不到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 相关文章推荐
javascript数组的扩展实现代码集合
Jun 01 Javascript
jquery 批量上传图片实现代码
Jan 28 Javascript
JS鼠标滑过图片时切换图片实现思路
Sep 12 Javascript
js实现延迟加载的方法
Jun 24 Javascript
angularJS模态框$modal实例代码
May 27 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
详解es6超好用的语法糖Decorator
Aug 01 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
Jan 08 Javascript
点击按钮弹出模态框的一系列操作代码实例
Mar 29 Javascript
js实现微信聊天界面
Aug 09 Javascript
JS ES6异步解决方案
Apr 29 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下使用SMTP发邮件的代码
2008/01/10 PHP
linux iconv方法的使用
2011/10/01 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
Vue仿支付宝支付功能
2018/05/25 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
vue实现评论列表功能
2019/10/25 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
Python复制目录结构脚本代码分享
2015/03/06 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
办公室文秘自我评价
2013/09/21 职场文书
应届生骨科医生求职信
2013/10/31 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
财务审计整改报告
2014/11/06 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
java开发双人五子棋游戏
2022/05/06 Java/Android