js代码

java/js 导出word 或excel

倖福魔咒の 提交于 2020-01-28 04:15:52
需求, 下载统计数据, 导出word/excel (含统计图) (已完成html统计展示) 怎么办呢? 思路. 思路一: 前端 (无法完全满足图片需求, 如果有图片,不建议这么做) 前端js: 如果需要得到的导出文档的内容, 和你已有的html展示是雷同的, 可以利用html2word, 或html2excel(引用插件jquery, FileSave.js, jquery.wordexport.js) 直接转成可识别的doc或xls文档. 这些js也可以自己写, 主要思路是, 按需获取需要导出的dom内容, 然后拼接固定的头部尾部代码, 让word软件可识别, 然后保存blob. 用js来实现的问题在哪里呢? first , 实际上, js生成的这个文件, 是在原汁原味的html上套了一层doc的壳(这一点在word点击另存为的时候可以看到, 当前文件的是一个*mhtml), 这是word软件可以解析编辑而已. 有些html的样式或者字体可能无法显示, 或者在当前的编辑模式下, word无法显示 second ,要命的是什么呢, 图片无法很好的显示! 如果html的img src是网址, word还是会发请求给服务器, 请求图片, 所以服务器的图片必须可以跨域访问 (!!!) 如果是canvas或者base64, word必须进入编辑模式才可以看到, wps是直接看不到的

webpack4.x 使用

让人想犯罪 __ 提交于 2020-01-28 03:38:43
webpack4.x webpack 模块打包工具,分析项目结构,找到js模块及一些浏览器不能运行的语言如ES6/sass等,并将其转换和打包为何时的格式供浏览器使用; 打包:将多个js文件打包成一个文件,减少服务器压力和下载带宽; 转换:把浏览器不能识别的语言转换为js,让浏览器能够正确识别 优化:优化项目,提高性能 安装 // 新建项目文件夹,并进入 mkdir webpack_demo cd webpack_demo //全局安装 npm install -g webpack // 全局安装后还需进行一个项目目录的安装,npm安装之前先进行初始化,目的-生成package.json文件(包括当前项目依赖模块,自定义脚本任务等) npm n init // 项目目录的安装 --save-dev保存到package.json中且在dev开发中使用,生产环境中不使用; npm install --save-dev webpack // 查看webpack版本 webpack -v // ps:查看webpack版本时会提示安装webpack-cli,因为此时安装的webpack版本是4.x;webpack 已经将 webpack 命令行相关的内容都迁移到 webpack-cli,所以除了 webpack 外,还需要安装 webpack-cli npm install --save

js中数组常用方法总结

荒凉一梦 提交于 2020-01-28 00:25:08
操作数组 操作数组,印象中操作数组的方法很多,下面总结了一下数组中常用的几个方法: JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Array(20); // 创建一个包含20项的数组var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组 (二)使用数组字面量表示法: var arr4 = []; //创建一个空数组var arr5 = [20]; // 创建一个包含1项的数组var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组 数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些: join() push()和pop() shift() 和 unshift() sort() reverse() concat() slice() splice() indexOf()和 lastIndexOf() (ES5新增) forEach() (ES5新增) map() (ES5新增) filter() (ES5新增) every() (ES5新增) some() (ES5新增)

详解js中的apply与call的用法

删除回忆录丶 提交于 2020-01-27 22:25:48
前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了 改变函数体内部 this 的指向 。 call 和 apply 二者的作用完全一样,只是接受参数的方式不太一样。 方法定义 apply Function.apply(obj,args) 方法能接收两个参数: obj: 这个对象将代替Function类里this对象 args: 这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。 call call方法 与 apply方法 的第一个参数是一样的,只不过第二个参数是一个参数列表 在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window 1 2 3 4 5 var test = function (){ console.log( this ===window); } test.apply( null ); //true test.call(undefined); //true 用法 "劫持"别人的方法 此时 foo 中的 logName 方法将被bar引用 , this 指向了 bar 1 2 3 4 5 6 7 8 9 10 var foo = { name: "mingming" , logName:

V8 引擎是如何工作的?

老子叫甜甜 提交于 2020-01-27 21:59:51
V8 引擎是如何工作的? CSDN ​ 已认证的官方帐号 17 人赞同了该文章 作者 | Fundebug 来源|Fundebug 最近,JavaScript生态系统又多了2个非常硬核的项目。 大神Fabrice Bellard发布了一个新的JS引擎QuickJS,可以将JavaScript源码转换为C语言代码,然后再使用系统编译器(gcc或者clang)生成可执行文件。 Facebook为React Native开发了新的JS引擎Hermes,用于优化安卓端的性能。它可以在构建APP的时候将JavaScript源码编译为Bytecode,从而减少APK大小、减少内存使用,提高APP启动速度。 作为JavaScript程序员,只有极少数人有机会和能力去实现一个JS引擎,但是理解JS引擎还是很有必要的。本文将介绍一下V8引擎的原理,希望可以给大家一些帮助。 JavaScript引擎 我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识自己的指令集,指令集对应的是汇编代码。写汇编代码是一件很痛苦的事情,比如,我们要计算N阶乘的话,只需要7行的递归函数: function factorial(N) { if (N === 1) { return 1; } else { return N * factorial(N - 1);

【worker】js中的多线程

时光总嘲笑我的痴心妄想 提交于 2020-01-27 17:01:06
因为下个项目中要用到一些倒计时的功能,所以就提前准备了一下,省的到时候出现一下界面不友好和一些其他的事情。正好趁着这个机会也加深一下html5中的多线程worker的用法和理解。 Worker简介 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。这些都是我们所公知的。但是随着业务的不断增加,只是单纯的单线程模式已经可能无法满足我们的需求了。于是在html5中新增了后台任务worker API。 w3c中的介绍:web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。 worker就是为了JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。开启后台线程,在不影响前台线程的前提下做一些耗时或者异步的操作。因为是不同的线程,所以主线程与worker线程互不干扰。也不会相互打断。所以在一些场景可以提高页面的流程性。Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用

利用html,css,js制作分割页面

不打扰是莪最后的温柔 提交于 2020-01-27 14:58:01
利用html,css,js制作分割页面 html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>分割界面</title> <link rel="stylesheet" href="./分割界面.css" /> </head> <body> <div class="container"> <div class="split left"> <!-- <img src="../imgs/pexels-photo-3551207.jpg" alt="" class="left" /> --> <h1>秋天</h1> <a href="#" class="button">秋天</a> </div> <div class="split right"> <!-- <img src="../imgs/pexels-photo-3568792.jpg" alt="" class="left" /> --> <h1>夏天</h1> <a href

面向对象的js编程 Call和apply方法

瘦欲@ 提交于 2020-01-27 10:42:13
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。  一、方法定义   1、call 方法    语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])    参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。   说明    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。    如果没有提供 thisObj 参数,那么 Global 对象被用作thisObj。说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。   2、apply方法   语法:apply([thisObj[,argArray]])    定义:应用某一对象的一个方法,用另一个对象替换当前对象。    说明:    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。   二、常用实例   实例1

[JS]笔记11之正则表达式

一个人想着一个人 提交于 2020-01-27 10:25:15
-->什么是正则表达式 -->定义正则 -->正则的索引 -->元字符 -->方括号、量词、其他符号 -->RegExp 对象的方法 -->String 对象方法 1、定义: 正则用于规定在文本中检索的内容,它是对字符串执行模式匹配的强大工具 RegExp(正则表达式) 对象的语法: new RegExp( pattern , attributes ); pattern 为一个字符串或匹配规则 attributes 为可选字符串,包含属性g、i 和 m g :代表全局匹配 (继续往下匹配) i :代表不区分大小写匹配 m:代表多行匹配,只对^和$模式有用 2、定义正则表达式 定义正则表达式有两种形式: 构造函数方式: new RegExp(pattern, attributes); 例:var reg=new RegExp(“ abc ","g"); 构造函数中的正则可以是 常量字符串 或 一个js变量 普通方式:/pattern/attributes(/正则/属性) 例:var reg=/abc/g; 普通方式中的正则必须是一个常量字符串 3、正则的索引 每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置(索引值)。 获取 reg.lastIndex 设置 reg.lastIndex=0; 4、元字符 \d : 匹配任意一个数字,0~9 中的任意一个

一个JS定时器类

萝らか妹 提交于 2020-01-27 08:03:53
学习js,因为函数和定时器直接的关系是非绑定的。我不能说我开启一个定时,然后拿一个变量去记录这个setInterval的返回值,这样很麻烦。 本着面向对象的思想,利用业余时间(周末在家里)写了一个类,用来管理定时器。 吐槽下jQuery,不知道是不是我的jQuery版本太低,貌似jQuery没有提供很好的定时器管理类。 好废话不多说,上代码: function TimeControlEx() { var nCount = 0; var oTimerIDs = []; //ID,Name var that = this; var nTimerId = 0; this.ExecOnce = function (funcid) { if (oTimerIDs[funcid].Limit == 0) { //只要归零了,肯定是定时的,对于这种,就得关闭 clearInterval(oTimerIDs[funcid].TimerID); } }; this.add = function (nSec, oFunction, sName, nTimes) { ///<param name="nSec">延迟时间,毫秒</param> ///<param name="oFunction">调用函数</param> ///<param name="sName">定时器名称(可选)</param> /