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(".",",");
问题:不起作用
答案 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(".",",");
});
享受!