为什么我的功能不起作用:
HTML:
<div class="cash">1234.00</div>
<div class="cash">123456.00</div>
<div id="total"></div>
JS:
function formatPrice(price) {
return price.reverse().replace(/((?:\d{2})\d)/g, '$1 ').reverse();
}
// Need to extend String prototype for convinience
String.prototype.reverse = function() {
return this.split('').reverse().join('');
}
$('.cash').each(function(){
$(this).html().formatPrice().appendTo('body');
});
我也试过这个,没有运气:
$('.cash').each(function(){
$(this).html() = i;
formatPrice(i).appendTo('body');
});
即使把它转移到一个基本功能,它仍然不会附加我的东西......我失去了我的魔力吗?
$('.cash').each(function(){
$(this).html().appendTo('body');
});
由于
更新:该功能只是假设这样做:
formatPrice('1234.00')//转换为“1 234.00” formatPrice('123456.00')//转换为“123 456.00”
答案 0 :(得分:7)
要使您的示例正常工作,您应该修复此部分代码:
$('.cash').each(function(){
$('body').append(formatPrice($(this).html()));
});
这是Fiddle
您无法运行html().formatPrice()
,因为您的案例中的formatPrice()
是独立函数,而不是字符串对象的方法。
如果您要替换div.cash
内的文字,请使用以下代码:
$('.cash').each(function(){
$(this).html(formatPrice($(this).html()));
});
如果您希望能够将formatPrice()
用于任何字符串,请执行以下操作:
String.prototype.formatPrice = function() {
return this.reverse().replace(/((?:\d{2})\d)/g, '$1 ').reverse();
}
$('.cash').each(function(){
$(this).html(function(i, h) { return h.formatPrice() });
});
以下是Fiddle
因此,只需选择您喜欢的选项并使用它即可。
答案 1 :(得分:4)
$(this).html()
返回文本中的html,而不是包含appendTo
函数的jQuery对象。
你可以这样做:
$($(this).html()).appendTo('body');
顺便说一句,你不应该“拿起HTML”并假设将它传递给你的formatPrice
函数是安全的。
这样做,它更清洁:
<div class="cash" data-cash="1234.00">1234.00</div>
$('body').append(formatPrice($(this).attr("data-cash")));