添加所有td值时,Javascript返回0

添加所有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) ?><

我有一个表,我想在用户访问页面时在div中添加和显示td值的总和

<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,'));