讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

jQuery实现局部“显示更多/显示更少”功能的精确控制教程

夜雪酱_3209

夜雪酱_3209

发布时间:2025-10-09 10:16:45

|

263人浏览过

|

来源于php中文网

原创

jQuery实现局部“显示更多/显示更少”功能的精确控制教程

本教程详细阐述如何在jQuery中实现“显示更多/显示更少”功能,确保“显示更少”按钮仅在对应“显示更多”按钮被点击的特定区域内显示。文章将深入分析常见问题,并提供利用closest()方法进行作用域管理的核心解决方案,通过清晰的HTML结构、CSS样式和jQuery代码示例,指导开发者构建出精准、可控且用户体验友好的内容展开/折叠交互。

1. 理解问题根源:全局选择器的局限性

在构建“显示更多/显示更少”功能时,一个常见的问题是当页面上存在多个内容块需要此功能时,点击其中一个“显示更多”按钮,可能会导致所有“显示更少”按钮或不相关的隐藏内容被显示出来。这通常是由于使用了全局选择器(如$('.show-less').show())来控制元素的显示与隐藏,而非针对特定内容块的局部操作。

原始代码示例中,$('.show-less').show(); 和 $('.show-block').toggleClass('show-block hide-block').toggle(); 这样的语句会影响页面上所有匹配的元素,而不是仅仅当前点击按钮所在的内容区域。为了实现精确控制,我们需要一种机制来限定操作的作用域。

2. 核心解决方案:利用 closest() 进行作用域管理

解决上述问题的关键在于为每个“显示更多/显示更少”功能组定义一个明确的父容器,并利用jQuery的closest()方法来定位这个父容器,然后在其内部查找和操作相关的子元素。

closest(selector) 方法从当前元素开始,向上遍历DOM树,查找最近的匹配指定选择器的祖先元素。通过这种方式,我们可以确保所有的显示/隐藏操作都限定在当前点击按钮所属的特定内容块内。

3. 构建清晰的HTML结构

为了有效地利用 closest(),每个可展开/折叠的内容块都应该包裹在一个共同的父容器中。这个父容器应该包含:

  • 初始可见的内容 (.show-block)。
  • 初始隐藏的内容 (.hide-block)。
  • “显示更多”按钮 (.show-more)。
  • “显示更少”按钮 (.show-less)。

以下是一个推荐的HTML结构示例:

<div class="full-post">
  <div class="show-block">
    <!-- 初始可见的内容 -->
    <p>这是一段初始可见的内容,通常是文章的摘要部分。</p>
  </div>
  <div class="hide-block">
    <!-- 初始隐藏的详细内容 -->
    <p>这是点击“显示更多”后才会出现的详细内容。</p>
    <p>可以包含多段文字、图片或其他元素。</p>
  </div>
  <div class='dedcription-btn pop recrut act show-more'>
    <span class='name-descripeion '>显示更多</span>
    <div class='btn-icon'> <i class='fas fa-chevron-right'></i></div>
  </div>
  <div class='dedcription-btn pop recrut act show-less '>
    <span class='name-descripeion'>显示更少</span>
    <div class='btn-icon'>
      <i class='fas fa-chevron-right'></i>
    </div>
  </div>
</div>

<!-- 页面上可以有多个这样的内容块 -->
<div class="full-post">
  <div class="show-block">
    <p>第二个内容块的摘要。</p>
  </div>
  <div class="hide-block">
    <p>第二个内容块的详细信息。</p>
  </div>
  <div class='dedcription-btn pop recrut act show-more'>
    <span class='name-descripeion '>显示更多</span>
    <div class='btn-icon'> <i class='fas fa-chevron-right'></i></div>
  </div>
  <div class='dedcription-btn pop recrut act show-less '>
    <span class='name-descripeion'>显示更少</span>
    <div class='btn-icon'>
      <i class='fas fa-chevron-right'></i>
    </div>
  </div>
</div>

在这个结构中,.full-post 作为每个内容块的独立容器,是 closest() 方法的目标。

4. CSS样式定义

为了确保初始状态的正确性,我们需要一些基本的CSS来隐藏 .hide-block 内容和 .show-less 按钮。

JSON Toolkit
JSON Toolkit

JSON文件多功能工具。支持格式化、验证、压缩、键排序及点记法路径查询。零依赖。

下载
.hide-block {
  display: none; /* 默认隐藏详细内容 */
}

/* 可以在页面加载时通过JS隐藏 .show-less 按钮,或者在CSS中设置 */
/* .show-less {
  display: none;
} */

5. jQuery实现细节

现在,我们来编写jQuery代码,利用 closest() 来实现精确的显示/隐藏逻辑。

$(document).ready(function() {
  // 页面加载时,默认隐藏所有的“显示更少”按钮
  $('.show-less').hide();

  // 监听“显示更多”按钮的点击事件
  $(".show-more").click(function(e) {
    e.preventDefault(); // 阻止默认行为,如果按钮是链接的话

    // 隐藏当前点击的“显示更多”按钮
    $(this).hide();

    // 在当前按钮的最近父容器 .full-post 中查找 .hide-block 并显示
    $(this).closest(".full-post").find(".hide-block").fadeIn(); // 使用fadeIn提供平滑过渡

    // 在当前按钮的最近父容器 .full-post 中查找 .show-less 按钮并显示
    $(this).closest(".full-post").find(".show-less").show();
  });

  // 监听“显示更少”按钮的点击事件
  $(".show-less").click(function(e) {
    e.preventDefault(); // 阻止默认行为

    // 隐藏当前点击的“显示更少”按钮
    $(this).hide();

    // 在当前按钮的最近父容器 .full-post 中查找 .hide-block 并隐藏
    $(this).closest(".full-post").find(".hide-block").fadeOut(); // 使用fadeOut提供平滑过渡

    // 在当前按钮的最近父容器 .full-post 中查找 .show-more 按钮并显示
    $(this).closest(".full-post").find(".show-more").show();
  });
});

代码解析:

  • $(document).ready(function() { ... });:确保DOM完全加载后再执行JavaScript代码。
  • $('.show-less').hide();:初始化时隐藏所有“显示更少”按钮。
  • $(".show-more").click(function(e) { ... });:为所有.show-more按钮绑定点击事件。
  • $(this).hide();:this指向当前被点击的.show-more按钮,将其隐藏。
  • $(this).closest(".full-post"):找到当前点击按钮最近的.full-post祖先元素。
  • .find(".hide-block").fadeIn();:在找到的.full-post内部,查找.hide-block元素并使用fadeIn()方法平滑显示。
  • .find(".show-less").show();:在相同的.full-post内部,查找.show-less按钮并显示。
  • “显示更少”按钮的逻辑与“显示更多”按钮类似,只是操作相反:隐藏自身,隐藏.hide-block,显示.show-more。
  • fadeIn()和fadeOut()提供了比简单show()和hide()更平滑的用户体验。

6. 完整示例代码

为了方便测试和理解,以下是一个包含HTML、CSS和JavaScript的完整示例。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jQuery局部“显示更多/显示更少”教程</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
  body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    margin: 20px;
    background-color: #f4f4f4;
  }
  .full-post {
    background-color: #fff;
    border: 1px solid #ddd;
    padding: 15px;
    margin-bottom: 20px;
    border-radius: 5px;
  }
  .hide-block {
    display: none; /* 默认隐藏详细内容 */
    margin-top: 10px;
    color: #555;
  }
  .dedcription-btn {
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    color: #007bff;
    margin-top: 10px;
    font-weight: bold;
  }
  .dedcription-btn:hover {
    text-decoration: underline;
  }
  .btn-icon {
    margin-left: 5px;
    font-size: 0.9em;
  }
  /* 模拟fontawesome图标,实际项目中需引入Font Awesome库 */
  .fas.fa-chevron-right::before {
    content: "▶"; /* 示例图标 */
  }
</style>
</head>
<body>

<h1>文章内容列表</h1>

<div class="full-post">
  <div class="show-block">
    <p><strong>文章标题一:如何优化前端性能</strong></p>
    <p>前端性能优化是提升用户体验的关键。本节将介绍一些常用的优化策略,包括资源压缩、懒加载、CDN使用等。这些方法能有效减少页面加载时间,提高响应速度。</p>
  </div>
  <div class="hide-block">
    <p>具体来说,资源压缩可以通过Webpack或Gulp等工具实现对JavaScript、CSS和HTML文件的缩小。图片优化则涉及格式选择(如WebP)、尺寸调整和延迟加载。CDN(内容分发网络)能够将静态资源分发到全球各地的服务器,使用户从最近的节点获取资源,从而加快访问速度。</p>
    <p>此外,利用浏览器缓存、减少HTTP请求、优化DOM操作等也是不可忽视的性能优化手段。持续监控和分析性能指标,是确保网站始终保持高效运行的重要环节。</p>
  </div>
  <div class='dedcription-btn show-more'>
    <span class='name-descripeion '>显示更多</span>
    <div class='btn-icon'> <i class='fas fa-chevron-right'></i></div>
  </div>
  <div class='dedcription-btn show-less '>
    <span class='name-descripeion'>显示更少</span>
    <div class='btn-icon'>
      <i class='fas fa-chevron-right'></i>
    </div>
  </div>
</div>

<div class="full-post">
  <div class="show-block">
    <p><strong>文章标题二:理解JavaScript异步编程</strong></p>
    <p>JavaScript作为单线程语言,其异步编程模型对于处理耗时操作至关重要。回调函数、Promise和Async/Await是JS中实现异步操作的三种主要方式。</p>
  </div>
  <div class="hide-block">
    <p>回调函数是最早的异步处理方式,但容易导致“回调地狱”。Promise解决了回调地狱的问题,通过链式调用使异步代码更易读和维护。Async/Await是基于Promise的语法糖,它使得异步代码看起来更像同步代码,极大地提高了开发效率和代码可读性。</p>
    <p>掌握这些异步编程范式,对于开发高性能、响应迅速的Web应用至关重要。在实际项目中,我们常常会结合使用这些技术来处理网络请求、文件读写等异步任务。</p>
  </div>
  <div class='dedcription-btn show-more'>
    <span class='name-descripeion '>显示更多</span>
    <div class='btn-icon'> <i class='fas fa-chevron-right'></i></div>
  </div>
  <div class='dedcription-btn show-less '>
    <span class='name-descripeion'>显示更少</span>
    <div class='btn-icon'>
      <i class='fas fa-chevron-right'></i>
    </div>
  </div>
</div>

<script>
$(document).ready(function() {
  // 页面加载时,默认隐藏所有的“显示更少”按钮
  $('.show-less').hide();

  // 监听“显示更多”按钮的点击事件
  $(".show-more").click(function(e) {
    e.preventDefault(); // 阻止默认行为,如果按钮是链接的话

    // 隐藏当前点击的“显示更多”按钮
    $(this).hide();

    // 在当前按钮的最近父容器 .full-post 中查找 .hide-block 并显示
    $(this).closest(".full-post").find(".hide-block").fadeIn();

    // 在当前按钮的最近父容器 .full-post 中查找 .show-less 按钮并显示
    $(this).closest(".full-post").find(".show-less").show();
  });

  // 监听“显示更少”按钮的点击事件
  $(".show-less").click(function(e) {
    e.preventDefault(); // 阻止默认行为

    // 隐藏当前点击的“显示更少”按钮
    $(this).hide();

    // 在当前按钮的最近父容器 .full-post 中查找 .hide-block 并隐藏
    $(this).closest(".full-post").find(".hide-block").fadeOut();

    // 在当前按钮的最近父容器 .full-post 中查找 .show-more 按钮并显示
    $(this).closest(".full-post").find(".show-more").show();
  });
});
</script>

</body>
</html>

7. 注意事项与最佳实践

  • 明确的父容器:确保每个“显示更多/显示更少”功能组都有一个唯一的父容器。这是 closest() 方法能够正确工作的基础。
  • 避免全局选择器:对于局部交互,尽量避免使用会影响页面上所有元素的全局选择器。
  • 使用 e.preventDefault():如果你的按钮是 标签或者有其他默认行为,使用 e.preventDefault() 可以阻止这些默认行为,确保只执行你定义的JavaScript逻辑。
  • 平滑过渡:使用 fadeIn() 和 fadeOut() 可以提供比 show() 和 hide() 更平滑的视觉效果,提升用户体验。
  • 可访问性:考虑为这些交互添加适当的ARIA属性(如 aria-expanded),以提高屏幕阅读器等辅助技术的兼容性。
  • 代码可读性:保持代码结构清晰,变量命名有意义,有助于团队协作和后期维护。

通过遵循本教程的指导,开发者可以有效地在jQuery中实现局部作用域的“显示更多/显示更少”功能,从而创建出更加健壮和用户友好的交互界面。

热门AI工具

更多
DeepSeek

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

WorkBuddy

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

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

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

立刻MV
立刻MV Hot

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

墨刀AI
墨刀AI Hot

一款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插件相关的文章、下载、课程内容,供大家免费下载体验。

621

2023.09.12

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

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

1256

2023.10.13

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

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

2362

2023.11.10

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

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

2168

2023.12.04

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

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

513

2023.12.06

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

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

337

2024.02.23

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

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

906

2024.02.23

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

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

309

2026.01.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

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

精品课程

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

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