JS代码的格式化和压缩

曾经为看别人写的杂乱代码而头痛吗?曾经为看BWindow代码而烦恼吗?曾经为减小JS体积和JS的可读性之间的矛盾而左右徘徊吗?最好的办法是有个代码格式化和代码压缩的程序,今天总算有了,它是纯JS编写的,当然也就是开源的了.由于写的仓促,还有些小BUG,请经常注意更新!

Format

document.getElementById("display").innerHTML = xx.format();

---------------------------------------------------------------------------------------------------
** 作者:ttyp
** 邮件:ttyp@21cn.com
** 日期:2006-5-21
** 版本:0.1
** ==================================================================================================
**/

function CLASS_FORMAT(code){
//哈希表类
function Hashtable(){
this._hash = new Object();
this.add = function(key,value){
if(typeof(key)!="undefined"){
if(this.contains(key)==false){
this._hash[key]=typeof(value)=="undefined"?null:value;
return true;
} else {
return false;
}
} else {
return false;
}
}
this.remove = function(key){delete this._hash[key];}
this.count = function(){var i=0;for(var k in this._hash){i++;} return i;}
this.items = function(key){return this._hash[key];}
this.contains = function(key){return typeof(this._hash[key])!="undefined";}
this.clear = function(){for(var k in this._hash){delete this._hash[k];}}

}

this._caseSensitive = true;

//字符串转换为哈希表
this.str2hashtable = function(key,cs){

var _key = key.split(/,/g);
var _hash = new Hashtable();
var _cs = true;

if(typeof(cs)=="undefined"||cs==null){
_cs = this._caseSensitive;
} else {
_cs = cs;
}

for(var i in _key){
if(_cs){
_hash.add(_key[i]);
} else {
_hash.add((_key[i]+"").toLowerCase());
}

}
return _hash;
}

//获得需要转换的代码
this._codetxt = code;

if(typeof(syntax)=="undefined"){
syntax = "";
}

this._deleteComment = false;
//是否大小写敏感
this._caseSensitive = true;
//可以后面加块语句的关键字
this._blockElement = this.str2hashtable("switch,if,while,try,finally");
//是函数申明
this._function = this.str2hashtable("function");
//本行括号内分号不做换行
this._isFor = "for";

this._choiceElement = this.str2hashtable("else,catch");

this._beginBlock = "{";
this._endBlock = "}";

this._singleEyeElement = this.str2hashtable("var,new,return,else,delete,in,case");
//得到分割字符
this._wordDelimiters= "  ,.?!;:\\/(){}[]\"'\r\n\t=+-|*%@#$^&";
//引用字符
this._quotation = this.str2hashtable("\",'");
//行注释字符
this._lineComment = "//";
//转义字符
this._escape = "\\";
//多行引用开始
this._commentOn = "/*";
//多行引用结束
this._commentOff = "*/";
//行结束词
this._rowEnd = ";";

this._in = "in";

this.isCompress = false;
this.style = 0;

this._tabNum = 0;

this.format = function() {
var codeArr = new Array();
var word_index = 0;
var htmlTxt = new Array();

if(this.isCompress){
this._deleteComment = true;
}

//得到分割字符数组(分词)
for (var i = 0; i 0)
word_index++;
codeArr[word_index++] = this._codetxt.charAt(i);
}
}

var quote_opened = false; //引用标记
var slash_star_comment_opened = false; //多行注释标记
var slash_slash_comment_opened = false; //单行注释标记
var line_num = 1; //行号
var quote_char = ""; //引用标记类型

var function_opened = false;

var bracket_open = false;
var for_open = false;

//按分割字,分块显示
for (var i=0; i

} else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._endBlock){
if(!this.isCompress){
this._tabNum--;
if(i=32&&codeArr[i+1].charCodeAt(0)

return htmlTxt.join("");
}

this.isStartWith = function(str,code,index){

if(typeof(str)!="undefined"&&str.length>0){
var cc = new Array();
for(var i=index;i=code[index].length&&c.indexOf(str)==0){
return true;
}
}else{
if(str.length>=code[index].length&&c.toLowerCase().indexOf(str.toLowerCase())==0){
return true;
}
}
return false;

} else {
return false;
}
}

this.isFunction = function(val){
return this._function.contains(this._caseSensitive?val:val.toLowerCase());
}

this.isBlockElement = function(val) {
return this._blockElement.contains(this._caseSensitive?val:val.toLowerCase());
}

this.isChoiceElement = function(val) {
return this._choiceElement.contains(this._caseSensitive?val:val.toLowerCase());
}

this.isSingleEyeElement = function(val) {
return this._singleEyeElement.contains(this._caseSensitive?val:val.toLowerCase());
}

this.isNextElement = function(from,word){
for(var i=from;i

this.getSkipLength = function(val){
var count = 0;
for(var i=0;i=0){
count++;
}
}
if(count>0){
count=count-1;
}
return count;
}

this.getIdent=function(){
var n = [];
for(var i=0;i

function doformat(o){
var htmltxt = "";

if (o == null){
alert("domNode is null!");
return;
}

var _codetxt = "";

if(typeof(o)=="object"){
switch(o.tagName){
case "TEXTAREA":
case "INPUT":
_codetxt = o.value;
break;
case "DIV":
case "SPAN":
_codetxt = o.innerText;
break;
default:
_codetxt = o.innerHTML;
break;
}
}else{
_codetxt = o;
}

var _syn = new CLASS_FORMAT(_codetxt);
htmltxt = _syn.format();
return htmltxt;
}

function go()
{
var code = document.getElementById("code").value;
var xx = new CLASS_FORMAT(code);
var a = new Date();

if(document.getElementById('cboOperate').selectedIndex==1){
xx.isCompress=true;
}else{
xx.style = parseInt(document.getElementById('cboStyle').value);
}
document.getElementById("display").value = xx.format();
alert("共花:" + (new Date().getTime()-a.getTime()) + "ms");
}
//-->

/*
这个是一个类
*/

function xx (num,str){//说明
var a = num;this.aa = a;
this.bb = function(){alert(str);}
this.cc = function(){for(var i=0;i

xx.prototype.dd= function(){alert("d d kd");}

var a = new xx(100,"hello"),b=new xx(0,"ttyp");
if(1>2) { alert();
}
else {
alert(" hell ");
}

a.bb();
b.dd();
alert(a.aa);

格式化
压缩

经典
微软

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • JS代码的格式化和压缩

    曾经为看别人写的杂乱代码而头痛吗?曾经为看BWindow代码而烦恼吗?曾经为减小JS体积和JS的可读性之间的矛盾而左右徘徊吗?最好的办法是有个代码格式化和代码压缩的程序,今天总算有了,它是纯JS编写的,当然也就是开源的了.由于写的仓促,还有些小BUG,请经常注意更新! Format document.getElementById("display").innerHTML = xx.format(); -------------------------------------------

  • 让 EditPlus 轻松拥有压缩代码和格式化代码功能

    这不,我一发现她有这个功能,灵感马上就来了,下面我给大家分享的是我今天刚做完的一个 EditPlus 小插件,主要的作用是让 EditPlus 也拥有压缩 JS 代码和格式化 JS 代码的功能,虽然实现起来简单,我希望能起到抛砖引玉的效果. 首先,请大家到以下地址下载一个小软件解压置于 EditPlus 的安装目录当中(其实地址可任意,为了方便管理,建议放于 EditPlus 的目录): (不知为何咖啡报毒,我以人格保证这不是病毒,也对机器绝无危害) 下载完成后,请按照如下的方法配置你的 Edi

  • Sublime Text 3插件Minify的安装与使用(js代码压缩)

    目录 需要用到的软件 进入正题Minify的安装 Minify文档翻译 需要用到的软件 SublimeText3+Node.js 进入正题Minify的安装 打开SublimeText,快捷键ctrl+shift+p调出package control输入install package找到minify回车安装即可,安装结成功后该文档在编辑器中弹出. # 注意(uglify-js默认只支持es5,如果要支持es6需要当前安装) uglify-js@3已支持es6压缩 # 未安装过minify所需组件

  • 千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码

    最近做项目需要我们前端对金额进行千分位格式化(也就是说每三位用逗号隔开),代码已经做了修改  之前的版本是本人疏忽 真对不住大家了!现在已经做了修改 如果还有不完善的地方 请大家多多指教! 1. 支持用逗号隔开 0-9位 逗号隔开 JS代码如下: 复制代码 代码如下: /**         * JS格式化         * @param number 要格式化的数字         * @param d [0-9]位 逗号隔开         */ function numFormat(nu

  • Js利用Canvas实现图片压缩功能

    最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢.为此,需要对图片进行压缩处理来优化上传功能.以下是具体实现: /* * 图片压缩 * img 原始图片 * width 压缩后的宽度 * height 压缩后的高度 * ratio 压缩比率 */ function compress(img, width, height, ratio) { var canvas, ctx, img64; canvas = document.createElement

  • js时间日期格式化封装函数

    js虽然提供了各种获取时间Date对象的不同属性方法,如:getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 ... ... 等等,但是却没有像java那样提供一个方法来供用户来根据自身提供的模板(pattern),来格式化指定时间对象,所以自己就封装了一个小方法,只供大家闲来调侃-.-,有好的建议还望慷慨指荐哦. 用到知识点: arguments:该对象代表正在执行的函数和调用它的函数的参数.不可显式创建,虽然有length属性,且能像数

  • JS中使用gulp实现压缩文件及浏览器热加载功能

    gulp类似于grunt,都是基于Node.js的前端构建工具.不过gulp压缩效率更高. 一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载.  先再命令行里输入   npm install gulp -g   下载gulp 二.创建gulp项目 创建一个你需要项目文件夹,然后在根目录输入  npm init  (npm init命令会为你创建一个package.json文件,这个文件保存着这个项目相关信息.比如你用到的各种依赖) 三.使用npm install 安

  • asp.net+js实现金额格式化

    根据用户需求,在输入金额时要格式化,即每三位数字加逗号分隔,并保留两位小数. 考虑到用户的体验,随使用JS对金额进行格式化,前台代码如下: 复制代码 代码如下: <asp:TextBox ID="txtAmount" runat="server" onkeypress="check()" onkeyup="run(this)"></asp:TextBox> JS代码如下: 复制代码 代码如下: //==

  • 3款实用的在线JS代码工具(国外)

    1. 压缩工具 用于在线压缩你的JS代码,它有一个选项"Include latest jquery.min.js",这对于提升速度非常有用. 推荐理由:缩小代码 = 更小的文件大小 = 更快的网页加载速度 2. 美化工具 用于将压缩后的代码转换回正常状态,使代码再次可读.该工具也可用于混淆的代码. 推荐理由:漂亮的代码 = 易读 = 更快地开发 3. 混淆工具 用于保护(混淆)你的代码,使代码不可读.很显然,一些模仿者可以使用一个工具去反混淆/解压缩,但是你为代码设置的保护越多越好.

  • 前端页面文件拖拽上传模块js代码示例

    最近给卫生局做一个表格上传/可视化系统,算是小有成果.今天把项目中的文件拖拽上传模块分离出来,做了一个独立的小demo,并把相关代码打包上传到了我的github中,为了其他学习者和开发者提供拙见. gitHub地址:https://github.com/codeplay2015/dragToUpload 由于代码中我的注释很详尽,所以具体逻辑实现及不介绍了,大家直接看代码及能明白.现在简单列一个功能清单和一些用到的知识点清单: 模态框 文件的批量上传 使用formData API 封装数据 并通

随机推荐