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

如何优化jQuery点击按钮切换图片及按钮样式状态的冗余代码

优化后的实现方案

你原代码的主要问题是存在大量重复逻辑,相同的DOM操作在if和else分支里重复写了两次,我们可以把公共逻辑抽出来,只保留差异化的状态判断部分,同时减少重复的DOM查询提升性能。

优化后的代码如下:

$(document).ready(function() {
    // 提前缓存DOM节点,避免每次点击重复查询
    const $btns = $('.btn');
    const $imgs = $('.img');

    $btns.on("click", function() {
        const $currentBtn = $(this);
        const isPlaying = $currentBtn.hasClass("playing");
        const btnIndex = $currentBtn.data("index");

        // 公共逻辑:重置所有按钮状态
        $btns.text("Play Animation").removeClass("btn_state_active playing");

        // 公共逻辑:更新所有图片src
        $imgs.each((_, img) => {
            const $img = $(img);
            const imgIndex = $img.data("index");
            // 只有当前按钮未激活时才给对应图片用b后缀,否则全用a后缀
            const suffix = (!isPlaying && btnIndex === imgIndex) ? "b" : "a";
            $img.attr("src", `image-${imgIndex}-${suffix}.gif`);
        });

        // 差异化处理:如果当前按钮之前未激活,就更新为激活状态
        if (!isPlaying) {
            $currentBtn.text("Stop Animation").addClass("btn_state_active playing");
        }
    });
});

优化点说明

  • 提前缓存了按钮和图片的jQuery对象,避免每次点击事件触发时都重新遍历整个DOM查询节点,执行效率更高
  • 去掉了重复的重置按钮、遍历图片的逻辑,把公共部分统一放到分支外执行,代码量减少近一半,后续维护只需要修改一处公共逻辑即可
  • 简化了后缀判断逻辑,合并成一行三元表达式即可处理两种场景
  • 链式调用jQuery方法,减少重复的选择器书写,代码更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:09:03