以下修改后的纯 JavaScript 将<td>
根据需要为元素着色:
function checkForm() {
var tds = document.querySelectorAll('td[id]');
for (var j = 0; j < tds.length; j++) {
var i = tds[j].innerHTML;
if(i < 10){
tds[j].style.backgroundColor = 'green';
} else if(i >= 11 && i <= 20){
tds[j].style.backgroundColor = 'yellow';
} else if(i > 20){
tds[j].style.backgroundColor = 'red';
}
}
}
但是您需要修改 HTML 以赋予<td>
s 唯一的 ID 值,例如
<body onload="checkForm();">
<table id="tableData" name="tableData">
<tr>
<td>abc</td>
<td id="a">5</td>
<td>abcd</td>
</tr>
<tr>
<td>aaaa</td>
<td id="b">15</td>
<td>bbbb</td>
</tr>
<tr>
<td>ccc</td>
<td id="c">25</td>
<td>dddd</td>
</tr>
</table>
</body>
如果始终是中间单元格需要颜色,则可以id
完全删除 s 并依赖“始终是中间单元格”这一事实。例如,请改用以下选择器:
var tds = document.querySelectorAll('td:nth-child(2)');
唯一的限制是querySelectorAll
IE<9 不支持它。所有其他浏览器都支持它。
由于需要 a 的单元格background-color
始终是第二个单元格,因此您可以使用 CSS nth-child 选择器作为 in 的参数querySelectorAll()
来“选择父级的第二<td>
个子元素”,在本例中为<tr>
.
因此td:nth-child(2)
找到<td>two</td>
以下 HTML 的元素:
<tr>
<td>one</td>
<td>two</td>
<td>three</td>
</tr>
查看一些如何:nth-child
工作的示例。
id
-less 解决方案的演示(如果要着色的单元格始终是中间单元格)。
由于 OP 被 IE8 卡住,并且 IE8 不支持:nth-child
替代的相邻兄弟组合器,因此可以使用替代相邻兄弟组合器来定位第二个孩子,但需要注意的是必须只有 3 个<td>
,而第三个不得包含任何数字。
更新:
根据需要在IE8下工作的实际background-color
需求并添加到第6列,这里有一个更简单(易读)且更跨浏览器兼容的jQuery解决方案:
jsBin 演示(所以它适用于 IE8)
HTML
onload="checkForm();
从_<body>
<table id="tableData" name="tableData">
<tr>
<td></td><td></td><td></td><td></td>
<td>abc</td>
<td>5</td>
<td>abcd</td>
</tr>
<tr>
<td></td><td></td><td></td><td></td>
<td>aaaa</td>
<td>15</td>
<td>bbbb</td>
</tr>
<tr>
<td></td><td></td><td></td><td></td>
<td>ccc</td>
<td>25</td>
<td>dddd</td>
</tr>
</table>
JavaScript
$(function(){
var tds = $('td:nth-child(6)');
for (var j = 0; j < tds.length; j++) {
var i = tds[j].innerHTML;
if(i < 10){
tds[j].style.backgroundColor = 'green';
} else if(i >= 11 && i <= 20){
tds[j].style.backgroundColor = 'yellow';
} else if(i > 20){
tds[j].style.backgroundColor = 'red';
}
}
});