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

同一元素slideUp与slideDown切换功能实现问题

网格元素点击展开/切换/收起交互优化

需求:

  • 点击网格内某元素,其关联内容通过slideDown展开;
  • 点击同一网格内其他元素,对应内容展开,同时收起之前展开的内容;
  • 重复点击同一元素时,执行slideUp收起内容。

初始代码无法实现重复点击收起的效果,重复点击时仍会触发slideDown:

初始代码

$(".g-item").on("click", function () {
    $(".g-item").removeClass('is-active');
    $(this).addClass('is-active');
    $(".g-inner").fadeOut();
    if ($(this).hasClass('is-active')) {
        $(this).parent().find(".is-active [data-grid_content]").slideDown();
    } else {
        $(this).parent().find(".is-active [data-grid_content]").slideUp();
    }
});

问题原因

初始代码每次点击都会先移除所有.g-item的is-active类,再给当前元素添加该类,导致if判断永远为真,只会执行slideDown逻辑,无法触发收起操作。

修改后的代码

jQuery(".g-item").on("click", function () {
    // 先收起其他已激活元素的内容并移除激活状态
    jQuery(".g-item.is-active").not(this).find("[data-grid_content]").slideUp().end().removeClass('is-active');
    
    if ($(this).hasClass("is-active")) {
        $(this).find("[data-grid_content]").slideUp();
        $(this).removeClass('is-active');
    } else {
        $(this).addClass('is-active');
        $(this).find("[data-grid_content]").slideDown();
    }
});

修改说明

  1. 先处理其他已激活元素:收起它们的关联内容,并移除is-active类,确保同一时刻只有一个元素处于激活状态;
  2. 判断当前元素激活状态:
    • 若已激活,收起其关联内容并移除激活类;
    • 若未激活,添加激活类并展开关联内容;
  3. 简化选择器逻辑,直接通过当前元素查找关联内容,避免不必要的父元素遍历,提升代码性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:46