jquery代码优化

104 阅读1分钟

实现功能

  • 点击登录按钮,ajax.load方式加载登录模块;
  • 点击X按钮,关闭面板;
  • 点击注册按钮,ajax.load方式加载注册模块。

原代码:


    $(function(){
        //加载登录模块
        $("#login_a").click(function(){
            $("body").prepend("<div id='login_prepend'></div>");
            $("#login_prepend").load('/index/login.html',function(){
                //移除登录模块
                $("#close img").click(function(){                    
                    $("#login_prepend").remove();
                })
                //载入注册模块
                $("#registe").click(function(){
                    $("#login_prepend").load('/index/registe.html',function(){
                        //移除注册模块
                        $("#close img").click(function(){                    
                            $("#login_prepend").remove();
                        })
                    });
                })
            });
        })
        
    })

原代码存在的问题

  1. 代码重复:移除模块的代码在登录模块和注册模块加载时都有重复。
  2. 缺少错误处理load 方法在加载失败时没有相应的错误提示和处理逻辑。
  3. 事件绑定问题:事件绑定没有使用事件委托,对于动态加载的元素,后续添加元素时可能无法正确绑定事件。
  4. 代码结构:代码结构不够清晰,功能模块划分不明确。

优化后的代码


    $(function () {
        // 封装加载模块的函数
        function loadModule(moduleUrl) {
            // 若已有登录模块则移除
            $('#login_prepend').remove();
            // 在 body 前添加登录模块容器
            $("body").prepend("<div id='login_prepend'></div>");
            // 加载模块内容
            $("#login_prepend").load(moduleUrl, function (response, status, xhr) {
                if (status === "error") {
                    console.error(`加载模块失败: ${xhr.status} ${xhr.statusText}`);
                    // 加载失败移除容器
                    $('#login_prepend').remove();
                }
            });
        }

        // 事件委托处理关闭模块操作
        $('body').on('click', '#close img', function () {
            $('#login_prepend').remove();
        });

        // 事件委托处理切换到注册模块操作
        $('body').on('click', '#registe', function () {
            loadModule('/index/registe.html');
        });

        // 绑定登录按钮点击事件
        $("#login_a").click(function () {
            loadModule('/index/login.html');
        });
    });

优化说明

  1. 封装函数:将加载模块的逻辑封装到 loadModule 函数中,避免代码重复,提高代码的可维护性和复用性。

  2. 错误处理:在 load 方法的回调函数中添加错误处理,当加载模块失败时,会在控制台输出错误信息并移除加载模块的容器。

  3. 事件委托:使用 $('body').on() 方法进行事件委托,将关闭模块和切换到注册模块的事件处理程序绑定到 body 元素上,确保动态加载的元素也能正确响应事件。

  4. 代码结构:将不同功能的代码进行分离,使代码结构更加清晰,易于理解和维护。

通过这些优化,代码的健壮性和可维护性都得到了显著提升。