$<span id="money">0</span>
我的html文档中有这个跨度链接到我的javascript。
function formatNumber(e){
var rex = /(^\d{2})|(\d{1,3})(?=\d{1,3}|$)/g,
val = this.textContent.replace(/^0+|\.|,|\s/g,"")
res;
if (val.length) {
res = Array.prototype.reduce.call(val, (p,c) => c + p) // reverse the pure numbers string
.match(rex) // get groups in array
.reduce((p,c,i) => i - 1 ? p + "," + c : p + "." + c); // insert (.) and (,) accordingly
res += /\.|,/.test(res) ? "" : ".0"; // test if res has (.) or (,) in it
this.value = Array.prototype.reduce.call(res, (p,c) => c + p);// reverse the string and display
}
}
var mySpan = document.getElementById("money");
mySpan.addEventListener("DOMSubtreeModified", formatNumber);
上面的代码是函数。我必须尝试格式化显示&#34; money&#34;每次更新跨度时,用逗号分隔的数字,例如1234将变为1,234,依此类推。但是,代码似乎没有按预期工作,并且数字仍未格式化。
答案 0 :(得分:0)
见example。工作中的功能
function format(){
var dollars = document.getElementsByClassName('money');
for(var i = 0; i < dollars.length; i++){
dollars[i].innerHTML = dollars[i].innerHTML.replace(/(\d{1,3})(?=\d{3})/g, '$1,');
}
}
我正在做的是用类名&#34; money&#34;拉出所有元素,然后将他们的innerhtml重新分配给自己的regexed版本。正则表达式
/(\d{1,3})(?=\d{3})/g
(/d{1,3}) //Find a group of digits between 1 and 3 digits in length. assigned to $1
(?= //Look ahead
\d{3} //Look for exactly 3 digits
)
/g //repeat until no more matches are found
然后,只需在$1
之后插入一个逗号注意,对于大于3位的小数,这不起作用,但是金钱永远不会达到千分之一。