添加所有td值时,Javascript返回0
我有一个表,我想在用户访问页面时在div中添加和显示td值的总和添加所有td值时,Javascript返回0,javascript,jquery,html,Javascript,Jquery,Html,我有一个表,我想在用户访问页面时在div中添加和显示td值的总和 <table> <thead> <tr> <th>Value</td> </tr> </thead> <tbody> <tr> <td class="d">PHP <?php echo number_format($l['target_daily'], 2) ?><
<table>
<thead>
<tr>
<th>Value</td>
</tr>
</thead>
<tbody>
<tr>
<td class="d">PHP <?php echo number_format($l['target_daily'], 2) ?></td>
</tr>
</tbody>
</table>
价值
PHP
和一些javascript来获取sum duning页面加载
<script>
$(calculateSumm);
function calculateSumm() {
var sum = 0;
$(".d").each(function() {
if(!isNaN(this.value) && this.value.length!=0) {
sum += parseFloat(this.value);
}
});
$('#result').html(sum);
};
</script>
<div id="result>//This will display sum values but returns 0</div>
$(计算摘要);
函数calculateSumm(){
var总和=0;
$(“.d”)。每个(函数(){
如果(!isNaN(this.value)&&this.value.length!=0){
sum+=parseFloat(此.value);
}
});
$('#result').html(总和);
};
试试这个:
<script>
$(calculateSumm);
function calculateSumm() {
var sum = 0;
$(".d").each(function() {
sum += parseFloat($(this).text());
});
$('#result').html(sum);
};
</script>
$(计算摘要);
函数calculateSumm(){
var总和=0;
$(“.d”)。每个(函数(){
sum+=parseFloat($(this.text());
});
$('#result').html(总和);
};
value属性不适用于TD元素。因此,我将this.value替换为$(this.text(),它使用jquery从td元素的内部获取文本值。问题是您使用的是this.value
,而td
元素没有(value
仅在输入元素和类似元素上),在单元格文本的开头有PHP
请参见代码注释:
$(calculateSumm);
function calculateSumm() {
var sum = 0;
$(".d").each(function() {
// Get the text of the cell
var val = $(this).text()
// Remove the PHP at the beginning
val = val.replace(/^\s*PHP\s*/, '');
if (val.length) {
// Parse it
val = parseFloat(val);
if (!isNaN(val)) {
// Add it
sum += val;
}
}
});
$('#result').html(sum);
};
我们替换“PHP”的部分可能需要一些额外的解释:
val = val.replace(/^\s*PHP\s*/, '');
这意味着:“匹配可选空格,后跟PHP,再后跟字符串开头的可选空格,并将其替换为空字符串”
旁注:没有理由怀疑你的代码出了什么问题。您的浏览器内置了一个JavaScript调试器,它允许您在代码中设置断点以暂停代码、检查变量、单步查看代码运行等。查看“开发工具”菜单(大多数浏览器上为F12和/或Ctrl+Shift+I)。如@T.J Crowder所建议
<script>
$(calculateSumm);
});
现在它可以工作了。完美的如果你试图使用td没有的.value
属性,你需要使用innerHTML
,第二步你仍然会得到NaN
,就像你在数字前面有PHP
一样。因此,你从
中添加值,它包括文本,特别是单词PHP
。这会影响你的数学计算。我尝试了你的代码,它对我很有效。但我必须删除“PHP”字符串。有没有办法保留该字符串。我用它作为货币符号,你的回答很好。解释得很好。
var sum = 0;
$(".d").each(function() {
// Get the text of the cell
var val = $(this).text()
// Remove the PHP at the beginning
val = val.replace(/^\s*PHP\s*/, '');
if (val.length) {
// Parse it
val = parseFloat(val);
if (!isNaN(val)) {
// Add it
sum += val;
}
}
});
//$('#result').html(sum);
$("#result").html(sum.toFixed(2).replace(/(^\d{1,3}|\d{3})(?=(?:\d{3})+(?:$|\.))/g, '$1,'));