讲师中心 微信公众号
AI工具推荐 视频效率加速

利用jQuery实现表格行点击高亮效果

夜雪酱_9792

夜雪酱_9792

发布时间:2025-12-06 22:13:01

|

683人浏览过

|

来源于php中文网

原创

利用jquery实现表格行点击高亮效果

本教程旨在解决在HTML表格中,点击行内按钮时,仅高亮显示该行的问题。文章分析了常见的错误实现方式及其原因,并提供了一个基于jQuery的简洁高效解决方案。通过直接绑定事件、利用`$(this)`获取当前元素以及`closest()`方法进行DOM遍历,我们可以精确地实现目标行的背景色改变,避免重复绑定、全局高亮或双击才能生效的问题,从而提升用户体验和代码可维护性。

引言:动态表格行高亮的需求

在Web应用开发中,表格是展示数据的重要组件。为了增强用户交互和视觉反馈,我们常常需要实现一些动态效果,例如当用户点击表格行中的某个操作按钮时,能够高亮显示该行,以指示当前操作的对象。这对于管理系统中的“激活”、“禁用”或“删除”等操作尤为常见。然而,实现这一功能时,开发者可能会遇到一些挑战,如事件重复绑定、选择器范围不准确或作用于所有行而非特定行的问题。

常见问题与误区分析

在尝试实现表格行高亮时,开发者可能会遇到以下几种常见误区:

误区一:重复绑定与选择器局限

某些尝试可能在每次点击时都重新绑定事件,并且使用了限制性较强的选择器,例如 document.querySelector("input[type='button']")。

function selectRow() {
  document.querySelector("input[type='button']").addEventListener('click', function() {
    $(this).closest('tr').css('background-color', 'red');
  });
}

问题分析:

  1. document.querySelector() 只会选择文档中第一个匹配的元素。这意味着即使表格中有多个按钮,也只有第一个按钮会被绑定事件。
  2. selectRow() 函数通过 onclick 属性在HTML中被调用。每次点击按钮时,该函数都会执行,导致事件监听器被重复绑定。这不仅浪费资源,还可能导致不可预测的行为。

误区二:事件重复触发与双击问题

另一种尝试可能使用jQuery的 .on() 方法,但同样在 onclick 属性中调用函数。

function selectRow() {
  $('td input[type="button"]').on('click', function() {
    $(this).closest('tr').css('background-color', 'red');
  });
}

问题分析:

  1. 与误区一类似,selectRow() 函数通过 onclick 属性在每次点击时都会被调用。
  2. 每次调用 selectRow() 都会对所有匹配的按钮 ($('td input[type="button"]')) 重新绑定一次点击事件。
  3. 当用户点击按钮时,由于事件被重复绑定了多次,可能需要多次点击(或看起来像双击)才能触发预期的效果,或者事件处理函数会执行多次。

误区三:全局操作而非局部

还有一种情况是试图通过遍历所有行来高亮,而不是仅高亮被点击按钮所在的行。

function selectRow() {
  var tbl = document.querySelector("table tbody");
  [...tbl.rows].forEach(el => {
    el.classList.toggle('table-danger');
  });
}

问题分析:

  1. 此代码会获取表格 tbody 中所有的行。
  2. forEach 循环会遍历所有行,并为每一行切换 table-danger 类。
  3. 结果是,无论点击哪个按钮,表格中的所有行都会被同时高亮或取消高亮,这显然不符合只高亮特定行的需求。

解决方案:利用jQuery实现精确行高亮

解决上述问题的关键在于:

  1. 移除HTML中的 onclick 属性,避免重复绑定事件。
  2. 使用jQuery在文档加载完成后统一绑定事件
  3. 在事件处理函数中,利用 $(this) 引用被点击的元素,并通过DOM遍历方法 closest() 找到其最近的父级 <tr> 元素。
  4. 直接对目标 <tr> 元素应用样式

核心思路

我们只需要在页面加载完成后,为所有操作按钮绑定一次点击事件。当任何一个按钮被点击时,事件处理函数会接收到该事件,并通过 $(this) 获取到被点击的按钮元素。接着,利用jQuery的 closest('tr') 方法,我们可以轻松地向上遍历DOM树,找到该按钮所属的最近的 <tr> 元素,然后对其应用高亮样式。

Miller CSV TSV JSON 数据处理器
Miller CSV TSV JSON 数据处理器

Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。

下载

代码实现

下面是实现这一功能的完整代码示例。

HTML 结构

表格的HTML结构保持不变,但需要移除按钮上的 onclick="selectRow();" 属性

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="datatablesSimple">
  <thead>
    <tr>
      <th>Solicitor</th>
      <th>End Date</th>
      <th>Days to Go</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dummy1</td>
      <td>2022-10-20</td>
      <td>4</td>
      <td><input type="button" class="btn btn-danger btn-sm" id="deac" value="Deactivate"/></td>
    </tr>
    <tr>
      <td>Dummy2</td>
      <td>2022-4-26</td>
      <td>200</td>
      <td><input type="button" class="btn btn-danger btn-sm" id="deac" value="Deactivate"/></td>
    </tr>
    <!-- 更多行... -->
  </tbody>
</table>

JavaScript (jQuery)

将事件绑定逻辑放置在文档加载完成后执行,确保DOM元素已准备就绪。

$(document).ready(function() {
  // 为所有类型为 'button' 的 input 元素绑定点击事件
  $('input[type="button"]').on('click', function() {
    // 移除所有行可能存在的高亮样式,确保每次只有一个行被高亮
    // 或者只针对当前点击的行进行操作,这取决于具体需求
    // 如果需要每次点击都取消之前的高亮,可以添加以下行:
    // $('#datatablesSimple tbody tr').css('background-color', ''); 

    // 获取被点击按钮的最近父级 <tr> 元素,并设置背景色
    $(this).closest('tr').css('background-color', 'red');
  });
});

完整示例代码

将上述HTML和JavaScript结合起来,即可实现所需功能。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格行高亮示例</title>
    <style>
        /* 可以选择使用CSS类来管理高亮样式,而非直接操作style属性 */
        .table-danger-highlight {
            background-color: red !important; /* 使用!important确保覆盖其他样式 */
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        .btn {
            padding: 5px 10px;
            border: none;
            border-radius: 3px;
            cursor: pointer;
            color: white;
        }
        .btn-danger {
            background-color: #dc3545;
        }
        .btn-sm {
            font-size: 0.8em;
        }
    </style>
</head>
<body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table id="datatablesSimple">
  <thead>
    <tr>
      <th>Solicitor</th>
      <th>End Date</th>
      <th>Days to Go</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dummy1</td>
      <td>2022-10-20</td>
      <td>4</td>
      <td><input type="button" class="btn btn-danger btn-sm" value="Deactivate"/></td>
    </tr>
    <tr>
      <td>Dummy2</td>
      <td>2022-4-26</td>
      <td>200</td>
      <td><input type="button" class="btn btn-danger btn-sm" value="Deactivate"/></td>
    </tr>
    <tr>
      <td>Dummy3</td>
      <td>2023-01-15</td>
      <td>-100</td>
      <td><input type="button" class="btn btn-danger btn-sm" value="Deactivate"/></td>
    </tr>
  </tbody>
</table>

<script>
$(document).ready(function() {
  $('input[type="button"]').on('click', function() {
    // 方案一:直接设置背景色 (如本教程所示)
    $(this).closest('tr').css('background-color', 'red');

    // 方案二:更推荐的做法是切换CSS类,这样样式和行为分离更清晰
    // 假设你有一个名为 .table-danger-highlight 的CSS类
    // $(this).closest('tr').toggleClass('table-danger-highlight');

    // 如果希望每次点击只高亮一行,且取消之前的高亮
    // 可以先移除所有行的高亮,再为当前行添加
    // $('#datatablesSimple tbody tr').removeClass('table-danger-highlight');
    // $(this).closest('tr').addClass('table-danger-highlight');
  });
});
</script>

</body>
</html>

注意事项与最佳实践

  1. 避免使用HTML onclick 属性: 尽量将JavaScript行为与HTML结构分离。使用jQuery或原生JavaScript的 addEventListener 来绑定事件,可以提高代码的可维护性和可读性,并避免重复绑定等问题。

  2. 事件委托(Event Delegation): 对于动态生成的表格内容(例如通过AJAX加载的数据),或者表格行数非常多时,为每个按钮单独绑定事件效率较低。此时,可以考虑使用事件委托,将事件监听器绑定到表格父元素(如 <tbody> 或 <table>),然后利用事件冒泡和 event.target 来判断是哪个按钮被点击。

    $('#datatablesSimple tbody').on('click', 'input[type="button"]', function() {
      $(this).closest('tr').css('background-color', 'red');
    });

    这种方式只需一个事件监听器,就能处理所有当前及未来添加到表格中的按钮点击事件,性能更优。

  3. 使用CSS类管理样式: 直接通过 css() 方法修改元素的 style 属性虽然简单,但不利于样式管理和复用。更推荐的做法是定义一个CSS类(例如 .table-danger-highlight),然后使用 addClass() 和 removeClass() 或 toggleClass() 方法来添加或移除这个类。

    .table-danger-highlight {
      background-color: red !important; /* 使用!important确保覆盖默认样式 */
    }
    $(this).closest('tr').addClass('table-danger-highlight');
    // 或者如果需要切换效果
    // $(this).closest('tr').toggleClass('table-danger-highlight');
  4. 单一高亮: 如果需求是每次点击只高亮一行,即点击新行时取消旧行的高亮,你需要在应用新高亮之前,先移除所有其他行的高亮样式。

    $('input[type="button"]').on('click', function() {
      // 移除所有行的高亮
      $('#datatablesSimple tbody tr').css('background-color', ''); 
      // 或者使用类:$('#datatablesSimple tbody tr').removeClass('table-danger-highlight');
    
      // 高亮当前行
      $(this).closest('tr').css('background-color', 'red');
      // 或者使用类:$(this).closest('tr').addClass('table-danger-highlight');
    });

总结

通过本教程,我们学习了如何在HTML表格中,当点击行内的操作按钮时,精确地高亮显示该行。关键在于避免HTML onclick 属性的重复绑定问题,转而使用jQuery在文档加载完成后进行事件绑定,并利用 $(this) 和 closest('tr') 进行精确的DOM元素定位。同时,我们也探讨了事件委托和使用CSS类管理样式等最佳实践,以构建更健壮、可维护和高性能的Web应用。掌握这些技术将有助于开发者更好地控制页面交互和用户体验。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

561

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

916

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2082

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2068

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

453

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

486

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

249

2026.01.13

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 93.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn