我基本上会有一个表格,其中包含一周中的几天(标题行)。 第1列 - 星期日,第2列 - 星期一等。每个单元格将按工作小时数输入,即8
。
在将数据输入每个单元格之后,我希望每个单元格在其列中动态计算其上方单元格总数的最后一行。理想情况下,应在将光标移动到不同的单元格后计算。
似乎我应该使用一些JavaScript。但我无法从头开始编写JavaScript;我只能在它写完之后把它调整到我需要的东西。
出于我们的目的,这是一个基本表格。我将在第1列中添加示例。
<table id="workweek" class="wwtable">
<tr><th>sunday</th><th>monday</th><th>tuesday</th><th>wednesday</th><th>thursday</th><th>friday</th><th>saturday</th></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>(Calculate 40 here) </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
</table>
忘了提。每个单元格都会让用户输入每天的小时数,因此每个单元格中都会有输入字段。
答案 0 :(得分:4)
如果jQuery对您来说是一个可行的选项,您可以遍历给定列中的所有td
,如下所示:
$('#workweek>tbody>tr>td:nth-child(1)').each( function(){
sum += parseInt($(this).text()) || 0;
});
我为你准备了一个工作示例on jsFiddle:
for (var i=1; i<8; i++)
{
var sum = 0;
// iteration through all td's in the column
$('#workweek>tbody>tr>td:nth-child(' + i + ')').each( function(){
sum += parseInt($(this).text()) || 0;
});
// set total in last cell of the column
$('#workweek>tbody>tr>td:nth-child(' + i + ')').last().html(sum);
}
请注意,如果列的最后一个单元格不为空,则此示例将删除该列的内容。
答案 1 :(得分:2)
您可以遍历表格的DOM,并将每个单元格的textContent
或innerText
作为以小时为单位的值。
这是一种流行的方式:
function strip(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent||tmp.innerText;
}
然后(类似这样):工作示例:http://jsfiddle.net/7srJf/3/
var tbl = document.getElementById('my-table');
var rows = tbl.rows;
var DAYS_OF_WEEK = 2, totals = [0, 0];
for (var i = 0; i < DAYS_OF_WEEK; i++) {
for (var j = 1; j < rows.length; j++) {
var cell = rows[j].cells[i];
var numHours = parseInt(strip(cell.innerHTML), 10);
totals[i] += numHours;
}
}