怎么用
javascript
做數(shù)據(jù)的格式化
作者:老
K
????????
我們在項(xiàng)目中都有用過金額數(shù)字及日期等數(shù)據(jù)格式化輸出顯示,比如前面加上“¥”,數(shù)值取小數(shù)點(diǎn)后兩位,短日期時(shí)間等。一般的高級語言及開發(fā)工具都有提供相應(yīng)的轉(zhuǎn)換函數(shù)如
format
之類,可是我在最近做
web
網(wǎng)上銀行相關(guān)的系統(tǒng)時(shí),卻遇到這個(gè)很麻煩的問題,就是
javascript
不提供這種
format
函數(shù),查了些資料,知道
vbscript
是有格式化函數(shù)的,可是
vbscript
是微軟專用的,無奈只好用正則表達(dá)式,可正則表達(dá)式也不能夠很通用地解決各種類型轉(zhuǎn)換問題,真的是很郁悶,無意中找到看到一個(gè)
AJAX
開發(fā)工具的演示(工具下載地址是點(diǎn)擊鏈接),看到它的數(shù)據(jù)有顯示“¥”和數(shù)值小數(shù)點(diǎn)后兩位格式化,馬上下載了看了下,發(fā)現(xiàn)它居然是用
javascript+XSL
實(shí)現(xiàn)了通用的格式化函數(shù),下載
AJAX WebShop
后,我找到它的
system.js
這個(gè)文件,打開找到以下函數(shù):
function FormatFloat(value,mask)
{
???????? return BasicFormat(value,mask,'FormatNumber')
}
function FormatDate(varDate, bstrFormat, varDestLocale)
{
???????? return BasicFormat(varDate,bstrFormat,'FormatDate',varDestLocale);
}
function FormatTime(varTime, bstrFormat, varDestLocale)
{
???????? return BasicFormat(varTime,bstrFormat,'FormatTime',varDestLocale);
}
function BasicFormat(value,mask,action,param)
{
???????? var xmlDoc;
???????? var xslDoc;
???????? var v='
???????? xmlDoc=parseXML(v);
???????? var x;
???????? if(isIE)
?????????????????? x='
???????? else
?????????????????? x='
???????? x+='
???????? if(isIE) {
?????????????????? x+='
?????????????????? if(param)x+=','+param;
?????????????????? x+=')';
???????? }
???????? else
?????????????????? x+='
???????? x+='';
???????? xslDoc=parseXML(x);
???????? var s;
???????? if(isIE)
????????
?s= xmlDoc.transformNode(xslDoc)
???????? else{
?????????????????? //for mozilla/netscape
??????? var processor = new XSLTProcessor();
?????????????????? processor.importStylesheet(xslDoc);
?????????????????? var result = processor.transformToFragment(xmlDoc, xmlDoc);
??????? var xmls = new XMLSerializer();
??????? s = xmls.serializeToString(result);
???????? }
???????? return s;
} |
看來他們對
xsl
用得可真是出神入化了,居然這樣就可以實(shí)現(xiàn)很通用的格式化轉(zhuǎn)換了,當(dāng)然不客氣了,直接加到我的函數(shù)庫中哈。
???????? 這個(gè)代碼偶沒有看得很懂,不過確實(shí)很管用,請對 XSL 精通的朋友分析下也好讓我們學(xué)習(xí)下。