【发布时间】:2016-10-28 17:09:05
【问题描述】:
我得到了下表(例如,该表是动态的,可能会更改其值):
.negative {
background-color: red;
font-weight: bold;
}
.positive {
background-color: green;
font-weight: bold;
}
<table border="1" align="center" id="testtable1">
<tr>
<th>#</th>
<th>Positive</th>
<th>Negative</th>
</tr>
<tr>
<td>1</td>
<td class="odd">7.4</td>
<td class="even">4.4</td>
</tr>
<tr>
<td>2</td>
<td class="odd">1</td>
<td class="even">5.4</td>
</tr>
<tr>
<td>3</td>
<td class="odd">2</td>
<td class="even">2.4</td>
</tr>
</table>
我需要从左列和右列中找到最大值并将每个最大值的整个 1 行绘制为正(绿色背景)或负(红色)颜色,所以第 1 行应该全是绿色,第 # 行2 应该是红色的。第 3 行应为白色(不应绘制最大值)。如果正最大值和负最大值都在同一行上,则该行应涂成绿色,然后应找到第二个负最大值并将其涂成红色。到目前为止,我已经得到了以下 JS 代码:
function MakeColors() {
table = document.getElementById("testtable1");
TRs = document.getElementsByTagName('tr');
TDs = document.getElementsByTagName('td')
var max_val_pos = 0;
var max_val_neg = 0;
var max_val_neg2 = 0;
for (var i = 0; i < TDs.length; i++) {
var temp = TDs[i];
var tdval = parseFloat(temp.firstChild.nodeValue);
if(max_val_pos < tdval && temp.className == "odd") {
max_val_pos = tdval;
}
if(max_val_neg < tdval && temp.className == "even") {
max_val_neg = tdval;
}
if(max_val_neg2 < tdval &&
tdval != max_val_neg &&
temp.className == "even"){
max_val_neg2 = tdval;
}
}
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
if (parseFloat(col.firstChild.nodeValue) == max_val_pos) {row.className = "positive";}
if (parseFloat(col.firstChild.nodeValue) == max_val_neg && row.className !="positive") {row.className = "negative";}else if(parseFloat(col.firstChild.nodeValue) == max_val_neg2){row.className = "negative";
}
}
}
}
MakeColors();
问题是如果第一个负最大值发生变化,我无法找到负列的下一个最接近的最大值。一般来说,我可以为一种情况找到解决方案,但是当数据更改时,结果会中断并且我绘制错误的行。欢迎任何如何解决问题的想法。谢谢。
【问题讨论】:
-
每次更改数据时再次致电
makeColors() -
这实际上是问题所在。每次调用 makeColors() 时,可能会根据表格内容产生正确或不正确的结果
-
您能描述一下在这种情况下预期的结果应该是什么:jsfiddle.net/fgqfqs09 哪些方块显示不正确?它们是错误的颜色还是错误的数字?
-
很抱歉,这种解释令人困惑。您需要以列表的形式明确定义所需的结果(在工具栏上;左侧第 8 个图标)要模拟红色,请使用
>(第 4 个图标)和代码括号{}(第 5 个图标)为绿色。什么时候说最大值...行的最大值或与表中所有单元格相比的最大值? -
对于mike510a fiddle,第3行绿色,正值为21.5是正确的,第2行红色,值为5.4是错误的。在这种情况下,红色行应该是第一个值为 9.4 的行,这是 Negative 列中 15.4 之后的第二个负值。您也可以尝试使用不同值的代码,以查看其工作和失败的场景。
标签: javascript html algorithm