我试图使一个不断更新的跨度有一个格式化的数字

时间:2017-09-20 16:59:38

标签: javascript html

$<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,依此类推。但是,代码似乎没有按预期工作,并且数字仍未格式化。

1 个答案:

答案 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位的小数,这不起作用,但是金钱永远不会达到千分之一。