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

jQuery点击slideToggle失效:如何定位跨SVG的目标div兄弟元素?

解决手风琴组件点击切换失效的问题

问题原因

你原来的$(this).next(".accordion-content")失效,是因为.accordion的紧邻下一个兄弟元素是SVG,而不是目标的.accordion-content。next()方法只会查找当前元素紧邻的下一个同级元素,自然匹配不到目标内容区块。

不用唯一ID的解决方案

方法1:使用nextAll()匹配后续第一个目标元素

修改JS代码,用nextAll()获取当前元素之后的所有同级元素,再筛选出第一个.accordion-content:

$(".accordion").on("click", function() {
  $(this).toggleClass("open");
  // 查找当前元素之后所有同级元素里的第一个.accordion-content
  $(this).nextAll(".accordion-content").first().slideToggle();
});

这种方式不管中间插入多少其他元素(比如SVG、额外标签),都能精准定位到对应的内容区块。

方法2:使用siblings()匹配同级目标元素

如果每个手风琴头部对应唯一的内容区块,也可以用siblings()直接获取同级的目标元素:

$(".accordion").on("click", function() {
  $(this).toggleClass("open");
  $(this).siblings(".accordion-content").slideToggle();
});

该方法适合单组手风琴的场景,逻辑简单直接。

方法3:用容器包裹手风琴组(更推荐)

把每个手风琴的头部、中间SVG、内容区块放在同一个容器内,结构更清晰,后续维护也更方便:

<div class="accordion-group">
  <div class="accordion open"><span>Styles</span>
    <div class="info-btn"><i class="fas fa-info"></i></div>
    <span class="accordion-plus-minus"><i class="fal fa-plus"></i><i class="fal fa-minus"></i></span>
  </div>
  <svg id="style-tip-highlight" xmlns="http://www.w3.org/2000/svg"></svg>
  <div class="accordion-content" id="style-accordion"></div>
</div>

对应的JS代码修改为:

$(".accordion").on("click", function() {
  $(this).toggleClass("open");
  // 找到父容器内的.accordion-content
  $(this).closest(".accordion-group").find(".accordion-content").slideToggle();
});

这种方式的优势在于,即使后续添加更多元素,只要在同一个组容器内,就不会影响选择逻辑,扩展性更强。

总结

不需要必须使用唯一ID,通过上述几种jQuery方法或结构调整,都能解决你的问题,其中容器包裹的方式更利于长期维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:06:25