2026-06-23 01:34:13
使用 jQuery 查找嵌套子元素并实现“显示更多”功能,可通过 DOM 遍历结合原生方法或 jQuery 封装方法定位目标元素,再通过切换类名或样式控制显示状态。 以下是具体实现步骤与代码示例:
一、核心实现逻辑HTML 结构:
<div class="text-container"> <h1>Title</h1> <div class="wrapper"> <div class="content hideContent"> <!-- 嵌套内容 --> </div> </div> <div class="show-more"> <a href="#">Show more</a> </div></div>jQuery 代码:
$(".show-more a").on("click", function() { // 定位目标元素:向上遍历两层到 .text-container,再查找 .content const contentDiv = this.parentNode.parentNode.querySelector('.content'); const classes = ['showContent', 'hideContent']; // 切换类名 if (contentDiv.classList.contains(classes[0])) { contentDiv.classList.replace(classes[0], classes[1]); } else { contentDiv.classList.replace(classes[1], classes[0]); } // 更新按钮文本 this.textContent = this.textContent === 'Show more' ? 'Show less' : 'Show more';});CSS 样式:
.showContent { display: block; }.hideContent { display: none; }示例 2:使用 jQuery 封装方法(closest() + find())优化后的代码(提高可读性):
$(".show-more a").on("click", function() { // 从触发元素向上查找最近的 .text-container,再向下查找 .content const $container = $(this).closest('.text-container'); const $contentDiv = $container.find('.content'); // 切换类名(jQuery 方式) $contentDiv.toggleClass('showContent hideContent'); // 更新按钮文本 $(this).text(function(i, text) { return text === 'Show more' ? 'Show less' : 'Show more'; });});三、关键方法解析DOM 遍历方法:
parentNode:原生方法,向上逐级获取父节点。
closest():jQuery/原生方法,从当前元素向上查找匹配选择器的第一个祖先。
find():jQuery 方法,在当前元素的后代中查找匹配选择器的元素。
选择器性能:
原生 querySelector() 性能通常优于 jQuery 选择器,尤其在复杂结构中。
在仅需简单选择时,优先使用原生方法;需链式操作或兼容性要求高时使用 jQuery。
代码可维护性:
避免过度使用 parentNode 链式调用(如 this.parentNode.parentNode.parentNode),改用 closest() 或 parents()。
使用语义化的类名(如 is-hidden)替代 hideContent/showContent,便于统一管理样式。
通过灵活组合 DOM 遍历方法(如 closest()、find())与原生选择器(如 querySelector()),可高效定位嵌套子元素并实现“显示更多”功能。实际开发中应根据 HTML 结构复杂度选择最优方案,并注重代码可读性与性能优化。