You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯JavaScript实现点击表格行红色高亮及其他行白色底色重置

纯JavaScript实现表格行点击高亮切换功能

我完全明白你遇到的问题——把jQuery逻辑转成原生JS时,经常会因为DOM加载时机、事件绑定方式的差异导致代码失效,而且还没报错,这种情况真的很头疼。咱们先拆解你原来的jQuery逻辑,再一步步改成能正常工作的原生JS代码。

你的需求很明确:点击表格行时高亮该行,点击其他行时取消之前的高亮并高亮新行。先看你原来的jQuery代码逻辑:

$('table tr').each(function(a,b){ $(b).click(function(){ $('table tr').css('background','#ffffff'); $(this).css('background','#ff0000'); }); });

核心就是遍历所有行绑定点击事件,点击时重置所有行背景,再给当前行设红色背景。下面是两种可行的原生JS实现方案:

方案一:直接操作行样式

这种方式和你原来的jQuery逻辑最接近,直接修改行的style属性:

<table>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
</table>

<script>
// 等待DOM完全加载后再执行代码,避免找不到元素
document.addEventListener('DOMContentLoaded', function() {
  // 获取所有表格行元素
  const tableRows = document.querySelectorAll('table tr');
  // 记录当前被高亮的行
  let activeRow = null;

  // 给每一行绑定点击事件
  tableRows.forEach(row => {
    row.addEventListener('click', function() {
      // 如果之前有高亮的行,恢复它的背景色
      if (activeRow) {
        activeRow.style.backgroundColor = '#ffffff';
      }
      // 高亮当前点击的行
      this.style.backgroundColor = '#ff0000';
      // 更新当前高亮行的记录
      activeRow = this;
    });
  });
});
</script>

方案二:用CSS类切换(更推荐)

把样式逻辑放到CSS里,JS只负责切换类名,这样代码更清晰,也方便后续修改样式:

<style>
/* 默认行背景 */
table tr {
  background-color: #ffffff;
  cursor: pointer; /* 加个鼠标指针提示,提升交互体验 */
}
/* 高亮样式类 */
table tr.highlighted {
  background-color: #ff0000;
}
</style>

<table>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
</table>

<script>
document.addEventListener('DOMContentLoaded', function() {
  const tableRows = document.querySelectorAll('table tr');
  let activeRow = null;

  tableRows.forEach(row => {
    row.addEventListener('click', function() {
      // 取消之前高亮行的类
      if (activeRow) {
        activeRow.classList.remove('highlighted');
      }
      // 给当前行添加高亮类
      this.classList.add('highlighted');
      activeRow = this;
    });
  });
});
</script>

为什么你之前的代码无效?

大概率是DOM加载时机的问题:如果你的JS代码写在<head>里,或者页面还没加载完表格就执行了JS,那document.querySelectorAll('table tr')会找不到任何元素,自然不会绑定事件,也就没有效果。用DOMContentLoaded事件就能确保代码在所有DOM元素加载完成后再执行。

另外,原生JS里遍历元素要用forEach(或者for循环),而不是jQuery的each方法,这也是容易踩的小坑。

内容的提问来源于stack exchange,提问作者Maverick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:49:54