发现一个不错的JavaScript写的格式JavaScript代码的程序,能够压缩代码,也能够格式化,功能不错。

< HTML >< HEAD >< TITLE > Format </ TITLE >
< META  content ="MSHTML 6.00.2800.1528"  name =GENERATOR >
< META  content =""  name =Author >
< META  content =""  name =Keywords >
< META  content =""  name =Description ></ HEAD >
< BODY >
< SCRIPT  language =JavaScript >
<!--
/**//**//**//* * 
**    ==================================================================================================  
**    类名:CLASS_FORMATER
**    功能:JS格式化  
**    示例:  
    ---------------------------------------------------------------------------------------------------  
  
            var xx        = new CLASS_FORMATER(code);

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 =   "   ,.?!;://<>(){}[]"' =+-|*%@#$^& " ;
     // 引用字符
     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  <   this ._codetxt.length; i ++ ) {       
             if  ( this ._wordDelimiters.indexOf( this ._codetxt.charAt(i))  ==   - 1 ) {         // 找不到关键字
                 if  (codeArr[word_index]  ==   null   ||   typeof (codeArr[word_index])  ==   ' undefined ' ) {
                    codeArr[word_index]  =   "" ;
                }
                codeArr[word_index]  +=   this ._codetxt.charAt(i);
            }  else  {
                 if  ( typeof (codeArr[word_index])  !=   ' undefined '   &&  codeArr[word_index].length  >   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  <= word_index; i ++ ){            
             // 处理空行(由于转义带来)
             if ( typeof (codeArr[i]) == " undefined " || codeArr[i].length == 0 ){
                 continue ;
            }  else   if (codeArr[i] == "   " || codeArr[i] == " " ){
                 if (slash_slash_comment_opened || slash_star_comment_opened){
                     if ( ! this ._deleteComment){
                        htmlTxt[htmlTxt.length]  =  codeArr[i];
                    }
                }
                 if (quote_opened){
                        htmlTxt[htmlTxt.length]  =  codeArr[i];                    
                }
            }  else   if (codeArr[i] == " " ){
             // 处理换行
            }  else   if  (codeArr[i]  ==   " " ){                                                                    
                slash_slash_comment_opened  =   false ;    
                quote_opened     =   false ;
                line_num ++ ;
                 if ( ! this .isCompress){
                    htmlTxt[htmlTxt.length]  =   " " +   this .getIdent();    
                }
             // 处理function里的参数标记
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && this .isFunction(codeArr[i])){
                htmlTxt[htmlTxt.length]  =  codeArr[i]   +   "   " ;
                function_opened  =   true ;
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == this ._isFor){
                htmlTxt[htmlTxt.length]  =  codeArr[i];
                for_open  =   true ;
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == " ( " ){
                bracket_open     =   true ;
                htmlTxt[htmlTxt.length]  =  codeArr[i];
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == " ) " ){
                bracket_open     =   false ;
                htmlTxt[htmlTxt.length]  =  codeArr[i];
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == this ._rowEnd){
                 if ( ! this .isCompress){
                     if ( ! for_open){
                         if (i < word_index && (codeArr[i + 1 ] != " " && codeArr[i + 1 ] != " " )){                            
                            htmlTxt[htmlTxt.length]  =  codeArr[i]  +   " "   +   this .getIdent();
                        } else {
                            htmlTxt[htmlTxt.length]  =  codeArr[i]  +   this .getIdent();
                        }
                    } else {
                        htmlTxt[htmlTxt.length]  =  codeArr[i];                    
                    }
                } else {
                    htmlTxt[htmlTxt.length]  =  codeArr[i];
                }
            }  else   if ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == this ._beginBlock){
                for_open     =   false ;
                 if ( ! this .isCompress){
                     switch ( this .style){
                         case   0 :
                             this ._tabNum ++ ;
                            htmlTxt[htmlTxt.length]  =  codeArr[i]  +   " "   +   this .getIdent();
                             break ;
                         case   1 :
                            htmlTxt[htmlTxt.length]  =   " "   +   this .getIdent();
                             this ._tabNum ++ ;
                            htmlTxt[htmlTxt.length]  =  codeArr[i]  +   " " +   this .getIdent();
                             break ;
                         default :
                             this ._tabNum ++ ;
                            htmlTxt[htmlTxt.length]  =  codeArr[i];
                             break ;
                            
                    }
                } else {
                    htmlTxt[htmlTxt.length]  =  codeArr[i];
                }

}  else   if ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  && codeArr[i] == this ._endBlock){
                 if ( ! this .isCompress){
                     this ._tabNum -- ;
                     if (i < word_index && codeArr[i + 1 ] != this ._rowEnd){
                        htmlTxt[htmlTxt.length]  =   " "   +   this .getIdent()  +  codeArr[i];
                    } else {
                        htmlTxt[htmlTxt.length]  =   " "   +   this .getIdent()  +  codeArr[i];
                    }
                } else {
                     if (i < word_index && codeArr[i + 1 ] != this ._rowEnd){
                        htmlTxt[htmlTxt.length]  =  codeArr[i]  +   this ._rowEnd;
                    } else {
                        htmlTxt[htmlTxt.length]  =  codeArr[i];
                    }
                }
             // 处理关键字
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  &&   this .isBlockElement(codeArr[i])){     
                htmlTxt[htmlTxt.length]  =  codeArr[i];
             // 处理内置对象(后面加一个空格)
            }  else   if  ( ! slash_slash_comment_opened &&! slash_star_comment_opened  &&   ! quote_opened  &&   this .isSingleEyeElement(codeArr[i])){    
                 if (codeArr[i] == this ._in){
                    htmlTxt[htmlTxt.length]  =   "   " ;
                }
                htmlTxt[htmlTxt.length]  =  codeArr[i]  +   "   " ;
             // 处理双引号(引号前不能为转义字符)    
            }  else   if  ( ! slash_star_comment_opened &&! slash_slash_comment_opened && this ._quotation.contains(codeArr[i])){                                                    
                 if  (quote_opened){
                     // 是相应的引号
                     if (quote_char == codeArr[i]){
                        htmlTxt[htmlTxt.length]  =  codeArr[i];                    
                        quote_opened     =   false ;
                        quote_char       =   "" ;
                    }  else  {
                        htmlTxt[htmlTxt.length]  =  codeArr[i];            
                    }
                }  else  {
                    htmlTxt[htmlTxt.length]  =   codeArr[i];
                    quote_opened     =   true ;
                    quote_char         =  codeArr[i];
                }                    
             // 处理转义字符
            }  else   if (codeArr[i]  ==   this ._escape){    
                htmlTxt[htmlTxt.length]  =  codeArr[i]; 
                 if (i < word_index - 1 ){
                     if (codeArr[i + 1 ].charCodeAt( 0 ) >= 32 && codeArr[i + 1 ].charCodeAt( 0 ) <= 127 ){
                        htmlTxt[htmlTxt.length]  =  codeArr[i + 1 ].substr( 0 , 1 );
                        htmlTxt[htmlTxt.length]  =  codeArr[i + 1 ].substr( 1 );
                        i = i + 1 ;
                    }
                }            
             // 处理多行注释的开始
            }  else   if  ( ! slash_slash_comment_opened  &&   ! slash_star_comment_opened &&! quote_opened && this .isStartWith( this ._commentOn,codeArr,i)){                                             
                slash_star_comment_opened  =   true ;
                 if ( ! this ._deleteComment){
                    htmlTxt[htmlTxt.length]  =   this ._commentOn;
                }
                i  =  i  +   this .getSkipLength( this ._commentOn);    
             // 处理单行注释
            }  else   if  ( ! slash_slash_comment_opened  &&   ! slash_star_comment_opened &&! quote_opened && this .isStartWith( this ._lineComment,codeArr,i)){                                                
                slash_slash_comment_opened  =   true ;
                 if ( ! this ._deleteComment){
                    htmlTxt[htmlTxt.length]  =    this ._lineComment;
                }
                i  =  i  +   this .getSkipLength( this ._lineComment);    
             // 处理忽略词
            }  else   if  ( ! slash_slash_comment_opened  &&   ! slash_star_comment_opened &&! quote_opened && this .isStartWith( this ._ignore,codeArr,i)){                                                
                slash_slash_comment_opened  =   true ;
                htmlTxt[htmlTxt.length]  =   this ._ignore;
                i  =  i  +   this .getSkipLength( this ._ignore);                    
             // 处理多行注释结束    
            }  else   if  ( ! quote_opened &&! slash_slash_comment_opened && this .isStartWith( this ._commentOff,codeArr,i)){                                
                 if  (slash_star_comment_opened) {
                    slash_star_comment_opened  =   false ;
                     if ( ! this ._deleteComment){
                        htmlTxt[htmlTxt.length]  =    this ._commentOff;
                    }
                    i  =  i  +   this .getSkipLength( this ._commentOff);        
                }
            }  else  {
                 // 不是在字符串中
                 if ( ! quote_opened){
                     // 如果不是在注释重
                     if ( ! slash_slash_comment_opened  &&   ! slash_star_comment_opened){    
                            htmlTxt[htmlTxt.length]  =  codeArr[i];                        
                     // 注释中                            
                    } else {
                         if ( ! this ._deleteComment){
                            htmlTxt[htmlTxt.length]  =  codeArr[i];
                        }
                    }
                } else {
                            htmlTxt[htmlTxt.length]  =  codeArr[i];
                }
            }
            
        }

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 < index + str.length;i ++ ){
                cc[cc.length]  =  code[i];
            }
             var  c  =  cc.join( "" );
             if ( this ._caseSensitive){
                 if (str.length >= 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 < word.length;i ++ ){
             if (word[i] != "   " && word[i] != " " && word[i] != " " && word[i] != " " ){                
                 return   this .isChoiceElement(word[i]);
            }
        }
         return   false ;
    }

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

this .getIdent = function (){
         var  n  =  [];
         for ( var  i = 0 ;i < this ._tabNum;i ++ ){
            n[n.length]  =   " " ;
        }
         return  n.join( "" );
    }
}

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 " );
}
// -->
</ SCRIPT >
< TEXTAREA  id =code  rows =12  cols =100 >
/*
这个是一个类
*/

function    xx   (num,str){//说明
var a = num;this.aa = a;
this.bb = function(){alert(str);}
this.cc = function(){for(var i=0;i < 10 ;i++){document.title =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);

</ TEXTAREA >   < BR >
< select  id ="cboOperate"  onchange ="if(this.selectedIndex==1)document.getElementById('cboStyle').disabled=true;else document.getElementById('cboStyle').disabled=false;" >
     < option  value ="0" > 格式化 </ option >
     < option  value ="1" > 压缩 </ option >
</ select >
< select  id ="cboStyle" >
     < option  value ="0" > 经典 </ option >
     < option  value ="1" > 微软 </ option >
</ select >
< INPUT  onclick =go()  type =button  value =go >< br >
< textarea  id =display  rows =12  cols =100 >
</ textarea >
</ BODY ></ HTML >

[转]JavaScript格式化代码程序相关推荐

  1. HTML5七夕情人节表白网页(抖音-流动爱心表白)HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 爱心表白网页

    HTML5七夕情人节表白网页❤抖音-流动爱心表白❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 爱心表白网页 这是程序员表白 ...

  2. HTML5七夕情人节表白网页(抖音超火3D炫酷魔方) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白

    HTML5七夕情人节表白网页❤抖音超火❤3D炫酷魔方❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这是程序 ...

  3. HTML5七夕情人节表白网页(抖音-罗盘时钟) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白

    HTML5七夕情人节表白网页❤抖音罗盘时钟❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这是程序员表白系列 ...

  4. HTML5七夕情人节表白网页(粉色的情人节爱心飞出ui特效) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心

    HTML5七夕情人节表白网页❤粉色的情人节爱心飞出ui特效❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这 ...

  5. HTML5七夕情人节表白网页(幻化3D相册) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白

    HTML5七夕情人节表白网页❤幻化3D相册❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这是程序员表白系列 ...

  6. HTML5七夕情人节表白网页(抖音3D立方体图像库) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白

    HTML5七夕情人节表白网页❤抖音❤3D立方体图像库❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这是程序 ...

  7. deepin终端编译c程序_C/C++知识点之Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译运行,格式化代码)...

    本文主要向大家介绍了 C/C++知识点之Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译&运行,格式化代码),通过具体的内容向大家展示 ...

  8. 微信小程序代码保存后,自动格式化代码

    步骤: 1.在 文件 中找到首选项,然后点击设置,找到setting.json点击 2.在末尾添加 "editor.formatOnSave": true 3.保存之后,每次编辑保 ...

  9. javascript常用代码【格式化时间日期】

    这周工作中,写了几个前端界面,页面中有个表格列字段是时间类型的,但是后端传递过来的时间是时间戳,所以需要在前端将其转换展示. 记录一下格式化日期代码,以后再遇见类似功能直接复制黏贴即可(其实是为了多点 ...

最新文章

  1. 跟我学XSL(四)-脚本与XSL的结合及应用
  2. 马斯克的火箭又炸了,这次可能怪美国宇航管理局:因督导员迟到,星舰原型SN11被迫在浓雾中发射...
  3. android 获取存储卡,Android获取存储卡路径的方式
  4. 从零开始玩转JMX(三)——Model MBean
  5. android--多线程,android多线程
  6. matlab对图像进行傅里叶变换_数字图像处理(一)—— 傅里叶变换
  7. oracle数据库同步异步优劣点,ORACLE数据库异步IO介绍
  8. 46、练习:输出指定目录下的所有文件名称
  9. ios 初体验窗口的创建
  10. 阿里云图标icon使用symbol 引用方式
  11. java对话框进度条_java进度条
  12. t600显卡和p620哪个好
  13. can例程 ecu_ECU程序及CAN总线实现
  14. 2023年天津仁爱学院专升本报名确认缴费考试流程
  15. 电梯plc的io分配_三菱Q系列PLC的io分配
  16. 【Vue项目】仿哔哩哔哩网页
  17. iframe是什么?html中iframe标签的用法详解
  18. 为什么PHICH配置信息和下行带宽dl-bandwith必须在PBCH MIB上广播
  19. Beginning Auto Layout Tutorial in iOS 7: Part 1
  20. (线段树)P5459 [BJOI2016]回转寿司

热门文章

  1. Pandas入门篇:Pandas基础
  2. kerberos详解
  3. Arxiv | 预测新型蛋白质间相互作用的图神经网络模型
  4. 学java选i5还是i7_选笔记本电脑,到底CPU是要选i5还是i7
  5. MOSS系列之五母版页和布局页Featur…
  6. 从单块架构到分布式架构之数据库集群(三)
  7. 如何通俗地理解合同矩阵
  8. matlab画三维曲面有范围,matlab画三维曲面
  9. 无动力风帽自动排风扇屋顶风机通风器
  10. 使用python将doc的word文件转换成docx文件