不到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 题型问答有答案参考
Feb 17 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
Javascript中产生固定结果的函数优化技巧
Jan 16 Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 Javascript
Boostrap基础教程之JavaScript插件篇
Sep 08 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
vue 组件高级用法实例详解
Apr 11 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
Vue props用法详解(小结)
Jul 03 Javascript
微信小程序保存多张图片的实现方法
Mar 05 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 进程锁定问题分析研究
2009/11/24 PHP
php读取xml实例代码
2010/01/28 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
jQuery图片轮播的具体实现
2013/09/11 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python中的is和id用法分析
2015/01/26 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python中django学习心得
2017/12/06 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
企业项目策划书
2014/01/11 职场文书
社区维稳工作方案
2014/06/06 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
校运会新闻稿
2015/07/17 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书