jquery类替换html

时间:2014-01-29 22:12:15

标签: jquery html

HTML代码

<td class='money'>192.13</td><td class='money'>85.23</td>

任务

我想用类钱替换所有单元格的内容“。”用“,”

解决方法1

var value = $(".money").html(); 
value = value.replace(".", ","); 
$(".money").html(value);

问题:第一个值的值正在替换所有其他值。

溶液2

$(".money").html().replace(".",",");

问题:不起作用

3 个答案:

答案 0 :(得分:4)

您需要使用.html()

的制定者版本
$(".money").html(function(i, html){
    return html.replace(".",",")
});

您的代码返回第一个td的替换字符串,但不会将其设置回单元格。

答案 1 :(得分:3)

因此,$('.money')是与您的选择器匹配的所有 DOM元素的集合,这就是解决方案#1不起作用的原因。因此,您需要查看每个匹配的元素并单独执行操作:

$.each($('.money'), function() {
  // $(this) refers to the current matched element in the loop
  var $this = $(this),
    value = $this.html().replace(".", ",");

  $this.html(value);
};

发帖后,我看到了Arun的回答,它更性感,所以请继续。但我认为你可以从我的答案中解释的概念中学习。

答案 2 :(得分:3)

为了尝试帮助您理解为什么它不起作用,让我们阅读您的代码:

  • 查找所有.money个元素,并获取第一个元素的html
  • .替换为,
  • 查找所有.money元素,并将html设置为第一个值。

第二段代码:

  • 查找所有.money个元素,并获取第一个元素的html
  • .替换为,
  • 好好开玩笑。

这是我对jQuery的许多问题之一:模糊的功能。 .html()会返回集合中 first 元素的HTML,但.html(value)会替换集合中所有元素的HTML。

无论如何,你正在寻找的jQuery是:

$(".money").each(function() {
    var $this = $(this);
    $this.html($this.html().replace(".",","));
});

还要考虑this Vanilla JS

[].forEach.call(document.querySelectorAll(".money"),function(e) {
    e.innerHTML = e.innerHTML.replace(".",",");
});

虽然代码可能看起来更多或更混乱,但它比任何jQuery解决方案都快许多倍。

最后,这是一种将性能与浏览器兼容性结合在一起的混合解决方案:

$(".money").each(function() {
    this.firstChild.nodeValue = this.firstChild.nodeValue.replace(".",",");
});

享受!