工作需要而寫的 Javascript 常用方法【一】

瀏覽器與系統判斷
var myDccMacFW = {
    
/*判斷瀏覽器*/
    uaMatch: 
function (ua) {
        ua 
= ua.toLowerCase();
        
var match = /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        
/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) ||
        
/(msie) ([\w.]+)/.exec(ua) ||
        
!/compatible/.test(ua) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(ua) ||
        [];
        
var matchOS = /(mac)[\sOSos]+/.exec(ua) || /(win)dows/gi.exec(ua) || [];
        
return { browser: match[1|| "", version: match[2|| "0", os: matchOS[1|| "" };
    },
    browser: {},
    operaSystem: {}

};

(
function ($) {//想利用VS的格式化(ctrl+E && ctrl+D),要將“(function ($)”之間的空格去掉才行;
    /*執行瀏覽器判斷
    *IE: myDccMacFW.browser.msie:bool
    *FF: myDccMacFW.browser.mozilla:bool
    *chrome,safari: myDccMacFW.browser.webkit:bool
    *opera: myDccMacFW.browser.opera:bool
    ** operaSystem
    *  myDccMacFW.operaSystem.win || myDccMacFW.operaSystem.mac
    
*/
    
var browserMatch = $.uaMatch(navigator.userAgent);
    
if (browserMatch.browser) {
        $.browser[browserMatch.browser] 
= true;
        $.operaSystem[browserMatch.os] 
= true;
        $.browser.version 
= browserMatch.version;
    }

})(myDccMacFW); 

 

 

//注:內置原型的prototype是只讀;
/*

*不帶任何一個參數都將全部字符來計算;
*len:int            要計算的長度,以中文長度計
*callback:function    callback(a,b,isSubstr)=>表示在參數len長度之中,a為英文長度,b為中文長度,isSubstr為是否截字了
*計算字符串中文長度,如“abc[d]我”長度為3,而“ef你”長度為2
*/
String.prototype.CounCN 
= function (len, callback) {
    
var a = b = 0, _isSubstr = false;
    
for (i = 0; i < this.length; i++) {
        
if (this.charCodeAt(i) < 128) {//一字節,如字母,數字,英文符號 etc..
            a++;
        }
        
else
            b
++;
        
if (len && callback)
            
if (a + b * 2 >= len * 2) {
                
if (a + b * 2 > len * 2) {
                    a
--;
                }
                _isSubstr 
= this.length > a + b;
                
break;
            }
    }
    
if (callback)
        callback(a, b, _isSubstr);
    
return Math.ceil((a + b * 2/ 2);
}
/*
截取字符串長度(漢字當兩個字符計算),如“abc[d]我”長度為3,而“ef你”長度為2
*len:int 要截取的長度,以中文長度計
*ext:string 表示長度過長時要追加的字符,默認為空;
*調用如:alert("0102030405060708091我".dccSubstr(10,"..."));
*/
String.prototype.dccSubstr 
= function (len, ext) {
    
var _a = _b = 0, _isSubstr = false;
    
this.CounCN(len, function (a, b, isSubstr) { _a = a, _b = b, _isSubstr = isSubstr; });
    
if (_isSubstr)
        
return this.substr(0, (_a + _b)) + (ext || "");
    
else return this.substr(0, (_a + _b));

posted @ 2011-08-12 15:37  BePast  阅读(309)  评论(0编辑  收藏  举报