jQuery appendTo函数不起作用

时间:2013-04-17 19:21:41

标签: jquery

为什么我的功能不起作用:

FIDDLE

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”

2 个答案:

答案 0 :(得分:7)

要使您的示例正常工作,您应该修复此部分代码:

$('.cash').each(function(){
    $('body').append(formatPrice($(this).html()));
});

这是Fiddle

您无法运行html().formatPrice(),因为您的案例中的formatPrice()是独立函数,而不是字符串对象的方法。

如果您要替换div.cash内的文字,请使用以下代码:

$('.cash').each(function(){
    $(this).html(formatPrice($(this).html()));
});

以下是updated fiddle

如果您希望能够将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")));