jQuery .each()不会独立迭代

时间:2015-04-22 18:45:31

标签: javascript jquery

我使用以下jQuery将范围样式应用于货币符号和一堆货币值的小数。

$('td.priceBox').each(function() {
    $(this).html('<span class="price_currency price_element">' + $(this).html().substr(0, 1) // this styles the currency unit
    + "</span>" + $(this).html().substr(1, $(this).html().length-3) // this leaves the rounded value as is
    + '<span class="price_cents price_element">'
    + $(this).html().substr(-2)
    + "</span>") // this styles the decimals
});

此代码适用于页面上的第一个值,例如&#34; $ 180.65,&#34;但随后复制该值并用&#34; $ 180.65&#34;替换页面上的每个值。

我做错了什么?如何让每个td.priceBox独立迭代?

注意:td.priceBox的内容是动态生成的,我无法访问它们。我无法内联编写跨度。

编辑:我有另一个旨在删除小数$('.bannerContent td').html($('.bannerContent td').html().replace(".",""));的脚本。这针对相同的td,但没有通过它的类来识别它。这成功删除了小数,但由于某种原因它打破了.each()方法。为什么呢?

1 个答案:

答案 0 :(得分:4)

$('.bannerContent td').html($('.bannerContent td').html().replace(".",""));

此代码正在用第一个的HTML替换所有td。这是因为虽然.html()作为一个setter函数适用于整个jQuery集,但作为一个getter它只在第一个上运行。如果您将其放在.each()内并使用$(this),则应该有效:

$('td.priceBox').each(function() {
    $(this).html($(this).html().replace(".",""));
    $(this).html('<span class="price_currency price_element">' + $(this).html().substr(0, 1) // this styles the currency unit
    + "</span>" + $(this).html().substr(1, $(this).html().length-3) // this leaves the rounded value as is
    + '<span class="price_cents price_element">'
    + $(this).html().substr(-2)
    + "</span>") // this styles the decimals
});

有关其工作原理的更多信息,请参阅jQuery .html()文档。