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

如何用jQuery为指定<h4>下方的<p>标签添加.active类

解决方案:无需额外类,用jQuery遍历实现分组激活

首先先确认你的HTML结构是这样的(和你描述的一致):

<h4>Option 1</h4>
<p>Foo</p>
<p>Bar</p>
<p>Baz</p>
<h4>Option 2</h4>
<p>abc</p>
<p>def</p>
<p>ghi</p>
<!-- ... 直到 Option 1000 -->
<h4>Option 1000</h4>
<p>123</p>
<p>456</p>
<p>789</p>

完全不需要给每组加重复类,用jQuery的nextUntil()方法就能精准定位每个h4对应的p元素,实现点击激活的效果。下面是针对jQuery 3.2.1的代码:

基础版本(排他性激活:点击一个h4时,其他组的active会被移除)

$(document).ready(function() {
  // 给所有h4绑定点击事件
  $('h4').on('click', function() {
    // 第一步:移除所有h4和对应p的.active类(重置状态)
    $('h4, h4 ~ p').removeClass('active');
    
    // 第二步:给当前点击的h4添加.active类
    $(this).addClass('active');
    
    // 第三步:选中当前h4之后、直到下一个h4之前的所有p,添加.active类
    $(this).nextUntil('h4').addClass('active');
  });
});

可选:切换当前组的激活状态(点击同一个h4可以取消激活)

如果需要支持点击同一个h4时,切换它的激活状态(而不是强制激活),可以稍微调整代码:

$(document).ready(function() {
  $('h4').on('click', function() {
    const $currentH4 = $(this);
    const isActive = $currentH4.hasClass('active');
    
    // 先移除所有激活状态
    $('h4, h4 ~ p').removeClass('active');
    
    // 如果当前h4之前没有激活,就添加激活类
    if (!isActive) {
      $currentH4.addClass('active');
      $currentH4.nextUntil('h4').addClass('active');
    }
  });
});

代码逻辑解释:

  • nextUntil('h4')是核心:它会选取当前元素(点击的h4)之后,直到遇到下一个h4标签之前的所有兄弟元素,刚好对应你每组h4下面的所有p标签,完全不需要额外的分组类。
  • $('h4, h4 ~ p')用来选中所有可能带有.active类的元素,确保重置状态时不会遗漏。

这样不管你有10个还是1000个Option,代码都能稳定工作,而且完全没有冗余的类标记~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:10:11