使用jQuery实现点击父元素时图片交替显示与还原

风婷吖_9883

风婷吖_9883

2025-11-12

771人浏览

原创

使用jQuery实现点击父元素时图片交替显示与还原

本教程详细介绍了如何利用jquery实现点击父级元素时,其内部图片能在两种状态间交替显示与还原。核心策略是动态管理`data-img`属性,使其在每次点击时存储当前图片的源地址,从而实现图片源的有效交换,确保点击行为能够反复切换图片,同时优化了选择器以提高代码的精确性。

在交互式网页设计中,根据用户操作(如点击)来切换元素状态并更新其内容是一种常见需求。例如,当一个卡片被点击时,我们可能希望它内部的图片发生变化,并在再次点击时恢复原状。传统的做法可能只实现单向切换,即图片只改变一次,而无法恢复。本教程将介绍一种健壮的方法,通过动态管理data-*属性来实现图片在点击父元素时的交替显示与还原。

问题背景与传统方法的局限

通常,我们会为父元素添加一个data-img属性来存储备用图片源,然后通过jQuery监听点击事件,在点击时切换父元素的active类,并用data-img中的图片源替换标签的src属性。

<div class="card egg" data-img="https://data.imgtools.co/output/tool/preview/400x400/face-extractor.png">
 <div class="card-image">
  @@##@@
 </div>
</div>
$('.egg').click(function(){
  $(this).toggleClass("active");
  var new_src = $(this).attr('data-img');
  // 这里的选择器 ".card-image img" 可能会影响到页面上所有匹配的图片
  $(".card-image img").attr("src",new_src);
});

这种方法的问题在于,data-img属性始终存储的是备用图片源。当图片被替换后,我们没有存储原始图片源的地方来在下一次点击时恢复它。因此,图片只能单向改变,无法实现交替显示。

解决方案:动态管理图片源

为了实现图片的交替显示,我们需要一种机制来在每次切换时“交换”当前图片源和备用图片源。核心思想是:在改变的src属性之前,先将当前的src值存储到data-img属性中,然后用data-img中原有的值来更新的src。这样,data-img属性就变成了一个动态的“交换缓冲区”,每次点击时,它都会持有当前图片的反向图片源。

此外,为了确保代码的精确性和可维护性,我们应该使用更具体的选择器,将图片操作限定在当前被点击的父元素内部。

HTML 结构

我们仍然使用带有data-img属性的父div来存储最初的备用图片源。

Gmail 日历和驱动程序的 Google Workspace MCP 服务器
Gmail 日历和驱动程序的 Google Workspace MCP 服务器

Google Workspace MCP 服务器通过任何支持 MCP 的 AI 助手,提供对 Gmail、Google Calendar、Drive、Docs、Sheets、Slides、Forms、Tasks、Contacts 和 Chat 的全面自然语言控制。它支持 OAuth 2.1 多用户认证,并包含用于编码代理的 CLI。

下载
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div class="card egg" data-img="https://data.imgtools.co/output/tool/preview/400x400/face-extractor.png">
  <div class="card-image">
    @@##@@
  </div>
</div>

jQuery 逻辑

以下是实现动态图片切换的jQuery代码:

$('.egg').click(function() {  
  // 1. 获取当前 data-img 属性中存储的“待切换”图片源
  const new_src = $(this).attr('data-img');  

  // 2. 获取当前被点击元素内部 img 标签的 src 属性,这是即将被替换的“当前”图片源
  const curr_src = $(this).find('.card-image img').attr('src');

  // 3. 将“当前”图片源存储回 data-img 属性,为下一次切换做准备
  // 此时,data-img 中存储的将是上一次的图片源(即当前显示的图片源)
  $(this).attr('data-img', curr_src);

  // 4. 切换父元素的 active 类
  $(this).toggleClass("active");  

  // 5. 将 img 元素的 src 更新为第一步获取的“待切换”图片源
  $(this).find('.card-image img').attr("src", new_src);
});

代码解析:

  1. const new_src = $(this).attr('data-img');:首先,我们获取父元素data-img属性中当前存储的图片URL。在第一次点击时,这将是最初设置的备用图片。在后续点击中,这将是上一次点击时存储的原始图片或另一个备用图片。
  2. const curr_src = $(this).find('.card-image img').attr('src');:接着,我们获取当前显示在标签上的图片URL。$(this).find('.card-image img')确保我们只选择当前被点击父元素内部的特定图片,而不是页面上所有匹配的图片,这大大提高了选择器的精确性。
  3. $(this).attr('data-img', curr_src);:这是实现交替显示的关键一步。我们将刚刚获取到的当前的src值(即curr_src)写回到父元素的data-img属性中。这样,data-img现在存储的就是当前显示的图片源。当用户再次点击时,new_src变量将获取到这个curr_src值,从而实现图片还原。
  4. $(this).toggleClass("active");:根据需要,切换父元素的active类,以实现样式上的变化。
  5. $(this).find('.card-image img').attr("src", new_src);:最后,我们将标签的src属性更新为第一步中获取到的new_src。

通过这种动态交换data-img和src值的策略,每次点击都能确保data-img中存储的是下一次切换所需的图片源,从而完美实现了图片的交替显示与还原。

注意事项

  • 选择器精度: 使用$(this).find('.card-image img')是至关重要的。它确保了图片操作的范围仅限于当前被点击的.egg元素内部的图片,避免了不必要的全局影响,尤其是在页面上存在多个.egg卡片时。
  • *`data-属性的灵活性:**data-*`属性不仅可以用于存储静态数据,如本例所示,它还可以作为动态数据的临时存储或交换介质,极大地增强了前端逻辑的灵活性。
  • 可扩展性: 这种模式非常适合应用于页面上多个独立的交互组件。每个.egg元素都会独立地管理其图片的切换状态,互不干扰。

总结

本教程通过一个实际案例,展示了如何利用jQuery动态管理data-img属性,巧妙地实现了点击父元素时内部图片的交替显示与还原功能。通过在每次点击时交换data-img属性和标签的src属性,并结合精确的选择器,我们创建了一个高效、灵活且易于维护的交互逻辑。这种方法不仅解决了图片单向切换的问题,也为处理类似的状态切换需求提供了有价值的思路。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.09.12

621

5

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

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

2023.10.13

1296

3

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

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

2023.11.10

2382

8

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

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

2023.12.04

2168

12

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

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

2023.12.06

513

4

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

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

2024.02.23

337

5

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

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

2024.02.23

946

5

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

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

2026.01.13

309

11

jQuery下载、CDN引入与版本管理指南
jQuery下载、CDN引入与版本管理指南

本专题围绕 jQuery 下载、CDN 引入、本地部署、版本管理及升级迁移展开,详细介绍 jQuery 官方版本区别、CDN 配置方式、jQuery 4.x 更新内容、Migrate 插件使用及常见加载报错解决方案,适合新手学习、企业项目部署以及老系统维护升级场景。

2026.06.01

243

10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

jQuery 教程
jQuery 教程

共42课时 | 16.8万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 19.7万人学习