不到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广告实现代码
Nov 17 Javascript
js类式继承的具体实现方法
Dec 31 Javascript
H5用户注册表单页 注册模态框!
Sep 17 Javascript
jQuery Easyui 下拉树组件combotree
Dec 16 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
webstorm中vue语法的支持详解
May 09 Javascript
详解angular应用容器化部署
Aug 14 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
原生js实现随机点餐效果
Dec 10 Javascript
JS性能优化实现方法及优点进行
Aug 30 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的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php构造函数的继承方法
2015/02/09 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
jQuery常见开发技巧详细整理
2013/01/02 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
python自动化测试实例解析
2014/09/28 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
详解Python循环作用域与闭包
2019/03/21 Python
python实现快递价格查询系统
2020/03/03 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
印度网上药店:1mg
2017/10/13 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
《两个铁球同时着地》教学反思
2014/02/13 职场文书
法人授权委托书格式
2014/04/08 职场文书
应届毕业生自荐书
2014/06/18 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
英语读书笔记
2015/07/02 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
Python基础之函数嵌套知识总结
2021/05/23 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript