<table>
<tr>
<th rowspan="2" id="h">Homework</th>
<th colspan="3" id="e">Exams</th>
<th colspan="3" id="p">Projects</th>
</tr>
<tr>
<th id="e1">1</th>
<th id="e2" headers="e">2</th>
<th id="ef" headers="e">Final</th>
<th id="p1" headers="p">1</th>
<th id="p2" headers="p">2</th>
<th id="pf" headers="p">Final</th>
</tr>
<tr>
<td headers="h">15%</td>
<td headers="e e1">15%</td>
<td headers="e e2">15%</td>
<td headers="e ef">20%</td>
<td headers="p p1">10%</td>
<td headers="p p2">10%</td>
<td headers="p pf">15%</td>
</tr>
</table>
<p><em>Tip: You can copy the JS-source and just paste it into your browsers js console to test this on any site.</em></p>
function highlightTdHeaders () {
var nodes = document.querySelectorAll('th, td');
nodes.forEach(function (node) {
var headers = node.getAttribute('headers') !== null ? node.getAttribute('headers').split(" ") : [];
function onHover () {
headers.forEach(function (header) {
var headerNode = document.getElementById(header);
if (headerNode === null) {
console.log(header + ' was not found');
} else {
headerNode.setAttribute('data-saved-style', headerNode.style);
headerNode.style = 'background-color: yellow';
}
});
}
function onLeave () {
headers.forEach(function (header) {
var headerNode = document.getElementById(header);
if (headerNode !== null) {
headerNode.setAttribute('data-saved-style', headerNode.style);
headerNode.style = headerNode.getAttribute('data-saved-style');
}
});
}
node.addEventListener('mouseenter', onHover);
node.addEventListener('touchstart', onHover);
node.addEventListener('mouseleave', onLeave);
node.addEventListener('touchend', onLeave);
});
}
highlightTdHeaders();
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.