[原创]RegularJS

数个项目的总结,框架为填补现今Ajax框架的不足而生,命名为RegularJS,后续将会不断更新。
/* *******************************************************
 * RegularJS framework
 *
 * verson: 0.1
 * author: star.stroll
 * 
 * 支持Firefox2与IE6或更高版本,其他浏览器待测.
 * 
 *******************************************************
*/

/* ***************************
 * 源生对象方法填补
 ***************************
*/

//  字符串去除前后空格
String.prototype.trim  =   function (){
    
return   this .replace( / (^\s*)|(\s*$) / g,  "" );
};

//  字符串去除前空格
String.prototype.trimLeft  =   function (){
    
return   this .replace( / ^\s* / g,  "" );
};

//  字符串去除后空格
String.prototype.trimRight  =   function (){
    
return   this .replace( / \s*$ / g,  "" );
};

//  把对象转为Array对象,可转换NodeList,arguments等等
Array.toArray  =   function (obj){
    
var  err;
    
try {
        
var  ls  =  [];
        
for ( var  i = 0 ;i < obj.length;i ++ ){
            ls.push(obj[i]);
        }
        
return  ls;
    }
catch (err){
        
return   null ;
    }
};

//  移除数组中的成员
Array.prototype.removeItem  =   function (obj){
    
for ( var  i = 0 ;i < this .length;i ++ ){
        
if ( this [i]  ==  obj){
            
for ( var  j = i;j < this .length - 1 ;j ++ ){
                
this [j]  =   this [j + 1 ];
            }
            
this .pop();
        }
    }
    
return   this ;
};

//  移除数组中的成员,相比removeItem速度要快,但循序不能维持原状
Array.prototype.removeItemFast  =   function (obj){
    
for ( var  i = 0 ;i < this .length;i ++ ){
        
if ( this [i]  ==  obj){
            
this [i]  =   this [ this .length - 1 ];
            
this .pop();
        }
    }
    
return   this ;
};

//  移除数组中所有成员
Array.prototype.removeAll  =   function (){
    
while ( this .length != 0 ){
        
this .pop();
    }
    
return   this ;
};

//  效果与concat效果相似,区别在于pushAll将修改源数组
Array.prototype.pushAll  =   function (ls){
    
for ( var  i = 0 ;i < ls.length;i ++ ){
        
this .push(ls[i]);
    }
    
return   this ;
};

//  将一个或多个成员插入到指定位置
Array.prototype.insert  =   function (){
    
if (arguments.length  ==   1 ){
        
this .push(arguments[ 0 ]);
    }

    
var  index  =  Number(arguments[ 0 ]);
    
if (arguments.length  >   1   &&  index >= 0   &&  index  <   this .length){
        
var  items  =  Array.toArray(arguments).slice( 1 );
        
var  hl  =   this .slice( 0 ,index);
        
var  fl  =   this .slice(index, this .length);
        
this .removeAll();
        
this .pushAll(hl.concat(items).concat(fl));
    }
    
return   this ;
};

//  将一个或多个数组中的所有成员插入到指定位置
Array.prototype.insertAll  =   function (){
    
if (arguments.length  ==   1 ){
        
this .pushAll(arguments[ 0 ]);
    }

    
var  index  =  Number(arguments[ 0 ]);
    
if (arguments.length  >   1   &&  index >= 0   &&  index  <   this .length){
        
var  items  =  Array.toArray(arguments).slice( 1 );
        
var  concatItems  =  [];
        
for ( var  i = 0 ;i < items.length;i ++ ){
            concatItems.pushAll(items[i]);
        }
        
var  hl  =   this .slice( 0 ,index);
        
var  fl  =   this .slice(index, this .length);
        
this .removeAll();
        
this .pushAll(hl.concat(concatItems).concat(fl));
    }
    
return   this ;
};

/* ***************************
 * 以下是自定义对象与方法
 ***************************
*/

//  简化扩展document.getElementById方法
=   function  (){
    
if (arguments.length  >   1 ){
        
for  ( var  i  =   0 , elements  =  [], length  =  arguments.length; i  <  length; i ++ ){
            elements.push($(arguments[i]));
        }
        
return  elements;
    }
    
return  document.getElementById(arguments[ 0 ].toString());
};

//  简化扩展document.getElementsByName方法
$N  =   function  (name){
    
if (arguments.length  >   1 ){
        
for  ( var  i  =   0 , elements  =  [], length  =  arguments.length; i  <  length; i ++ ){
            elements.pushAll($N(arguments[i]));
        }
        
return  elements;
    }
    
return  Array.toArray(document.getElementsByName(arguments[ 0 ].toString()));
};

//  简化扩展document.getElementsByTagName方法
$TN  =   function  (tagName){
    
if (arguments.length  >   1 ){
        
for  ( var  i  =   0 , elements  =  [], length  =  arguments.length; i  <  length; i ++ ){
            elements.pushAll($TN(arguments[i]));
        }
        
return  elements;
    }
    
return  Array.toArray(document.getElementsByTagName(arguments[ 0 ].toString()));
};

//  判断对象是否有效
=   function  (obj){
    
return  obj  ==   null   ||  obj  ==  undefined;
};

//  判断是否为空字符串
_S  =   function  (string){
    
return  _(string)  ||  string  ==   "" ;
};

//  为尽可能使老JS应用兼容Firefox,尽可能少用
if (_(document.all)){
    document.all 
=  $TN( " * " );
}

//  Event对象常用方法
EventUtil  =  {
    
//  获取浏览器源生Event对象
     " getOriginalEventObject "  :  function (){
        
var  err;
        
try {
            
var  e  =  window.event;
            
if ( ! _(e)){
                
return  e;
            }
else {
                pcaller 
=   this [ " getOriginalEventObject " ].caller;
                    
while ( ! (e  instanceof  Event)  &&   ! _(pcaller)){
                    e 
=  pcaller.arguments[ 0 ];
                    pcaller 
=  pcaller.caller;
                }
                
return  (e  instanceof  Event)  ?  e : undefined;
            }
        }
catch (err){
            
return  undefined;
        }
    },
    
//  获得更好兼容性的Event对象
     " getEventObject "  :  function (){
        
var  org  =   this .getOriginalEventObject();
        
if (_(org.target)  &&   ! _(org.srcElement)){
            org.target 
=  org.srcElement;
        }
    }
};

2009-08-09 添加:
//  提高IE浏览器拼装字符串的效率
StringBuffer  =   function (string){
    
var  buff  =  _(string)  ?  [] : [string];
    
var  flag  =   true ;
    
var  value  =   "" ;
    
this .append  =   function (string){
        buff.push(string);
        flag 
=   true ;
        
return   this ;
    };
    
    
this .toString  =   function (){
        
if (flag){
            value 
=  buff.join( '' );
            flag 
=   false ;
        }
        
return  value;
    };

    
this .length  =   function (){
        
return   this .toString().length;
    };
};



未完待续……

转载于:https://www.cnblogs.com/starstroll/archive/2009/07/26/1531453.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值