jQuery脚本只会影响我页面中的第一个DIV吗?

时间:2019-03-04 12:09:07

标签: jquery

我是jQuery的新手,似乎无法按照我的喜好使用以下代码:

<script type="text/javascript">
        jQuery(document).ready(function($) {
            $.fn.digits = function(text){
                $(this).text(text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") + '€' );
            };
            var tempText = $.trim($("#price").text());
            tempText = tempText.substr(0, parseInt(tempText.length) );
            $("#price").digits(tempText);
        });
</script>

应该将所有#price div中的数字转换为逗号分隔的货币版本:

1000000 = 1,000,000€

这对于页面上#price的第一个实例效果很好,但是如果同一ID在同一页面上出现多次,则其余脚本不会被格式化。

我发现DIV的音乐是独特的,因此我尝试改为将类改为(#price到.price),这可以解决问题,但现在却产生了一个新问题。现在,.price的所有实例都显示在.price的每个实例中-如果可以的话。

假设我在一页中有3次价格。

示例1(.price):200000

示例2(.price):250000

示例3(.price):300000

应显示:

200,000€

250,000€

300,000€

相反,它给了我

200,000€250,000€300,000€

200,000€250,000€300,000€

200,000€250,000€300,000€

那是为什么,我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果要影响多个元素,请使用类引用而不是div。

更改此行

$("#price").digits(tempText);

$(".price").digits(tempText);

因为类用于收集元素,并且div仅用于一次引用一个项目,所以它仅获取第一个div。

并且请记住,在使用$('。price')时,您必须使用循环,因为它们很多,所以您的代码就会变成

$.each('.price', function(o, v){
   var tempText = $.trim($(this).text());
   tempText = tempText.substr(0, parseInt(tempText.length) );
   $(this).digits(tempText);
});

在所有条件都相同的情况下,这应该起作用...