如果只是var x(一个数字(,函数工作正常但是,当我试图按名称将相同的方法应用于html表类时,根本不起作用
<html>
<body>
<tr>
<td class="sal">45.515420</td>
</tr>
<script>
function myFunction() {
var sal = document.getElementsByClassName("sal");
for (i = 0; i < sal.length; i++) {
var currentValue = sal[i].innerHTML;
var newvalue = (sal.toFixed(2));
sal[i].innerHTML = newValue
}
}
onload = myFunction()
</script>
</body>
</html>
提供的代码需要一些更改,我将尝试解决它们:
-
将
currentValue
转换为数字,因为toFixed
是数字的一部分var currentValue = Number(sal[i].innerHTML);
-
onload = myFunction()
,我们可以调用函数在加载时运行它myFunction();
-
将
<td class='sal'>45.515420</td>
封装在<table>
中以使HTML成为有效的<table> <tr> <td class='sal'>45.515420</td> </tr> </table>
应用这些修复程序会产生:
function myFunction() {
var sal = document.getElementsByClassName("sal");
for (i = 0; i < sal.length; i++) {
var currentValue = Number(sal[i].innerHTML);
sal[i].innerHTML = currentValue.toFixed(2);
}
}
myFunction();
<table>
<tr>
<td class='sal'>45.515420</td>
</tr>
</table>
首先,为了在td
元素上使用document.getElementsByClassName
,您需要将tr和td元素封装在table
标记中。
其次,toFixed()
是一种数字方法,在使用toFixed()
之前,需要使用Number()
将字符串转换为数字。
var sal = document.getElementsByClassName("sal");
for (i = 0; i < sal.length; i++) {
var currentValue = sal[i].innerHTML;
var newValue = Number(currentValue).toFixed(2);
sal[i].innerHTML = newValue;
}
<html>
<body>
<table>
<tbody>
<tr>
<td class="sal">45.515420</td>
<td class="sal">49.515420</td>
</tr>
</tbody>
</table>
</body>
</html>
除了所有其他好的建议外,这里的版本使用了更现代的JS实践。
-
querySelectorAll
-
forEach
-
箭头函数表达式
const sals = document.querySelectorAll('.sal');
sals.forEach(sal => {
const number = Number.parseFloat(sal.textContent);
sal.textContent = number.toFixed(2)
});
<table>
<tbody>
<tr>
<td class="sal">45.515420</td>
</tr>
</tbody>
</table>