不到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 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
jquery 关于event.target使用的几点说明介绍
Apr 26 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
Vue实现自带的过滤器实例
Mar 09 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
jQuery实现高级检索功能
May 28 jQuery
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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP多线程类及用法实例
2014/12/03 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python生成九宫格图片
2018/11/19 Python
Python实现多属性排序的方法
2018/12/05 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python实现画图软件功能方法详解
2020/07/28 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
心理咨询承诺书
2014/05/20 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2015年妇女工作总结
2015/05/14 职场文书
毕业典礼主持词
2015/06/29 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
Nginx 匹配方式
2022/05/15 Servers