如何使 table 单元格链接并具有背景颜色?

How to make a table cell be linked and with background-color?

我正在使用 javascript 为 table 单元格动态着色。我希望单元格具有整个单元格的背景颜色,并且里面的文本应该是超链接的。我认为我不关心整个单元格是否是超链接的一部分

一个尝试是:

<td><a class="score" href="#">cell text</a></td>
<td><a href="#">cell text</a></td>
<td><a class="score" href="#">cell text</a></td>
...
...
<script>
  var colorScore = document.getElementsByClassName('score');
  for (i=0; i < colorScore.length; i++) {
    colorScore[i].style.backgroundColor = "red";
  }
</script>

这给了我一个单元格,其中只有文本是超链接的,并且只有文本有背景色。我还尝试将 class="score"<td> 而不是 <a> 放在一起,但这没有提供任何背景颜色(但显然保留了超链接)。最后,我用 <td> 周围的 <a> 尝试了它,但这既没有给我超链接也没有背景颜色,我相信这在 html.

中是不允许的

我也在使用 Bootstrap 5,但我认为它没有提供任何解决方案。

您可以尝试将超链接目标存储在自定义属性中,并拦截将值分配给 window.locationclick 事件。

我们可以像这样使用事件委托:

var colorScore = document.getElementsByClassName('score');
for (i = 0; i < colorScore.length; i++) {
  colorScore[i].style.backgroundColor = "red";
}
document.addEventListener("click", function(e) {
  let closest = e.target.closest('.score');
  if(closest) location = closest.dataset.href;
})
td {
  padding: 10px;
  border: 1px solid;
}
<table>
  <tr>
    <td class="score" data-href="https://stacksnippets.net"><a>cell text</a></td>
    <td><a href="#">cell text</a></td>
    <td class="score" data-href="https://stacksnippets.net"><a>cell text</a></td>
  </tr>
</table>

目前只有 a 元素正在获取背景。我们需要的是它的父元素来获取背景。

此代码片段执行此操作,而且为了演示,它为每个 td 提供了填充,因此我们可以看到单元格被红色覆盖,而不仅仅是文本。

var colorScore = document.getElementsByClassName('score');
for (i = 0; i < colorScore.length; i++) {
  colorScore[i].parentElement.style.backgroundColor = "red";
}
td {
  padding: 10px;
}
<table>
  <tr>
    <td><a class="score" href="#">cell text</a></td>
    <td><a href="#">cell text</a></td>
    <td><a class="score" href="#">cell text</a></td>
  </tr>
</table>