<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();
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.