在 jquery 中格式化和取消格式化数字

Wer*_*eta 0 jquery number-formatting

我使用 jqnumformatter 插件格式化数字。一切都很好,但我在删除逗号时遇到了问题。我使用 .each() 循环遍历所有带有逗号的输入。但在这种情况下,我需要单击下一个按钮两次,以便删除数字上的所有逗号。

<script>
$(function(){

    $("#next").click(function(){//unformats the numbers

        $("input[data-toformat=format]").each(function(){
            var formatted = $(this).val();
            var unformatted = formatted.replace(",", "");
            $(this).val(unformatted);
        });

    });


});
</script>

<input type="text" id="num" data-toformat="format"  autofocus/>
<input type="text" id="num2" data-toformat="format" />
<input type="button" id="next" value="next">
<input type="button" id="back" value="back">
Run Code Online (Sandbox Code Playgroud)

你有更好的方法来做到这一点吗?如果我在每个数字上有 2 个或更多逗号,它真的无法一次性取消所有数字的格式。

nnn*_*nnn 5

问题在于您调用.replace()方法的方式

var unformatted = formatted.replace(",", ""); 
Run Code Online (Sandbox Code Playgroud)

如果您将字符串作为第一个参数传递,它只会替换第一次出现。如果您传递正则表达式,您可以设置正则表达式“全局”标志来替换所有出现的:

var unformatted = formatted.replace(/,/g, "");
Run Code Online (Sandbox Code Playgroud)

请注意,您的代码可以简化很多,因为您并不真正需要局部变量:

$(this).val( $(this).val().replace(/,/g, "") );
Run Code Online (Sandbox Code Playgroud)

但它可以进一步简化,因为如果您将函数传递给.val()方法,您甚至不需要.each()循环:

$(function(){
   $("#next").click(function(){
       //unformats the numbers
       $("input[data-toformat=format]").val(function(i, oldVal){
           return oldVal.replace(/,/g, "");
       });
   });
});
Run Code Online (Sandbox Code Playgroud)

此语法 for.val()将每个元素的旧(当前)值传递给您提供的函数,将新值设置为该函数的返回值。