工作需要而寫的 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;
}
/*判斷瀏覽器*/
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));
/*
*不帶任何一個參數都將全部字符來計算;
*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));
}