我使用以下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()方法。为什么呢?
答案 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()
文档。