javascript:获得平均值时的NaN

时间:2015-02-18 11:06:59

标签: javascript html

所以我跟着这个小提琴:http://jsfiddle.net/4h6w64d8/2/ 但不幸的是,当我尝试代码时,平均值是NaN。 在小提琴中,即使列没有值,它仍然会计算并显示平均值。但是,当我尝试它时,它只会显示NaN。

这是我的HTML:

<table id="scorecard_student" class="table table-striped table-bordered">
<thead>
    <tr>
        <th>Code </th>
        <th>PO 1</th>
        <th>PO 2</th>
        <th>PO 3</th>
        <th>PO 4</th>
        <th>PO 5</th>
        <th>PO 6</th>
        <th>PO 7</th>
        <th>PO 8</th>
        <th>PO 9</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td width="7%">ICT117</td>
        <td></td>
        <td></td>
        <td></td>
        <td>2.0</td>
        <td></td>
        <td>2.0</td>
        <td></td>
        <td></td>
        <td>1.5</td>

    </tr>
    <tr>
        <td width="7%">ICT118</td>
        <td></td>
        <td></td>
        <td>2.0</td>
        <td>2.0</td>
        <td></td>
        <td></td>
        <td></td>
        <td>2.0</td>
        <td>1.5</td>

    </tr>
    <tr>
        <td width="7%">ICT110</td>
        <td>3.0</td>
        <td>2.0</td>
        <td></td>
        <td></td>
        <td></td>
        <td>2.0</td>
        <td></td>
        <td></td>
        <td></td>

    </tr>
    <tr>
        <td width="7%">ICT111</td>
        <td></td>
        <td></td>
        <td></td>
        <td>2.0</td>
        <td>2.0</td>
        <td>2.0</td>
        <td>1.5</td>
        <td></td>
        <td></td>

    </tr>
</tbody>
<tfoot>
    <tr bgcolor="#FFF380">
        <td>
            <center>Average</center>
        </td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</tfoot>
</table> 

我的js:

<script type="text/javascript">
    var table = document.getElementById('scorecard_student'),
        rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'),
        footer = table.getElementsByTagName('tfoot')[0];


    for (var i = 1; i <= <? php echo $po_count; ?> ; i++) {
        var sum = numOfValues = 0;
        for (var j = 0, l = rows.length; j < l; j++) {
            try {
                sum += parseFloat(
                    rows[j].getElementsByTagName('td')[i]
                    .innerHTML
                );
                numOfValues++;
            } catch (e) {}
        }

        var avg = sum / numOfValues;
        footer.getElementsByTagName('td')[i]
            .innerHTML = Math.round(avg * 100) / 100;
    }
</script>

更新,我想我现在知道了。

if (rows[j].getElementsByTagName('td')[i].innerHTML != '') {
    sum += parseFloat(
        rows[j].getElementsByTagName('td')[i]
        .innerHTML
    ) || 0;

    numOfValues++;
}

1 个答案:

答案 0 :(得分:3)

在某些情况下,您会收到空白文本,您需要跳过它:

 sum += parseFloat(
            rows[j].getElementsByTagName('td')[i]
            .innerHTML
          ) || 0; //<--