jquery总计不合时宜

时间:2014-05-19 17:38:48

标签: javascript jquery html each

所以我的网站上有以下HTML表格

<div class="timecard">
<table>
<tr class = "display-even-row">
    <td align="left" style="color:#000099">In</td>
    <td align="left" class="job_code">2400-Duffy's</td>
    <td align="left" class="hrs">00:04</td>
</tr>
<tr class = "display-odd-row">
    <td align="left" style="color:#009900">In</td>
    <td align="left" class="job_code">1500-Orchard</td>
    <td align="left" class="hrs">01:00</td>
</tr>
<tr class = "display-even-row">
    <td align="left" style="color:#000099">In</td>
    <td align="left" class="job_code">32-Black</td>
    <td align="left" class="hrs">10:00</td>
</tr>
<tr class = "display-odd-row">
    <td align="left" style="color:#009900">In</td>
    <td align="left" class="job_code">1500-Orchard</td>
    <td align="left" class="hrs">4</td>
</tr>
</table>
</div>

<div id="total">
</div>

我有以下jquery脚本来计算每个单独作业代码的总小时数。它是动态设计的,允许以后添加更多的作业代码。但是,它不能正确地累计小时数,但如果作业有分钟则不会显示。

$(document).ready(function(){

var timeString = $(this).next('td.hrs').text();
var components = timeString.split(':');
var seconds = components[1] ? parseInt(components[1], 10) : 0;
var hrs = parseInt(components[0], 10) + seconds / 60;
total += hrs;

var temp = [];
$('.job_code').each(function(index, element){
    var text = $(this).text();
    temp.push(text);
});

// remove duplicates
var job_code = [];
$.each(temp, function(index, element){
    if($.inArray(element, job_code) === -1) job_code.push(element);
});

var sum = {};
$.each(job_code, function(index, element){
    var total = 0;
    $('.job_code:contains('+element+')').each(function(key, value){
        total += parseInt($(this).next('td.hrs').text());
        sum[index] = {'job_code' : element, 'total': total};
    });
});

console.log(sum);

$.each(sum, function(index, element){
    $('#total').append('<p>Total for '+element.job_code+': '+element.total+'</p>');
});

});

是否需要进行哪些更改以使其在00:00而不是整个整数中运行?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果不使用日期/时间解析库,您可能希望在尝试解析它们之前提取冒号两侧的整数字符串。

var timeString = $(this).next('td.hrs').text();
var components = timeString.split(':');
var seconds = components[1] ? parseInt(components[1], 10) : 0;
var hrs = parseInt(components[0], 10) + seconds / 60;
total += hrs;

您也可以使用正则表达式来执行此操作,但拆分应该可以正常工作。