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

WordPress环境下JS实现导航active状态切换图标功能失效如何解决?

问题根源

你当前active状态失效的核心原因是页面实际路径后缀和menuActive函数里判断的字符串不匹配:

  • 比如「Violin Repairs」页面的实际访问路径是/repairs-restorations,用window.location.pathname.split("/").pop()拿到的路径后缀是repairs-restorations,但你函数里判断的是path == "violin-repairs",匹配失败
  • 比如「M.U.D.」页面实际路径是/m-u-d,拿到的后缀是m-u-d,但你判断的是path == "mud",同样匹配失败
    所有非首页页面都匹配失败后,只有首页的判断偶尔触发,就会出现一直跳回首页图标的问题。

修复方案

第一步:统一路径映射规则

确保每个菜单a标签的data-link属性值,和对应页面的路径后缀/你自定义的pagename变量值完全一致即可。
比如「Violin Repairs」页面路径是/repairs-restorations,要么把a标签的data-link改成repairs-restorations,要么给这个页面的pagename变量赋值为violin-repairs,两边保持一致。

第二步:替换原有JS代码

把你原来的JS代码全部替换为下面的优化版,不需要写大量重复的if判断,后续新增菜单也不需要修改核心逻辑:

var imagelink2 = "@asset('images/unmarked.png')";
var imagelink = "@asset('images/marked.png')";
var currentPath = '';

$(document).ready(function(){
    // 获取当前页面对应的标识
    var path = window.location.pathname.split("/").pop();
    if(typeof pagename != 'undefined'){
        path = pagename;
    }
    currentPath = path;
    menuActive(currentPath);

    // hover交互逻辑
    $(".is_active a").hover(function() {
        menuActive($(this).data('link'));
    }, function() {
        menuActive(currentPath);
    });

    // 原有右键禁止、截图禁止逻辑保留
    $('img').bind('contextmenu', function(e) {
        return false;
    });
    $(document).keyup(function(e){
        if(e.keyCode == 44) return false;
    });
});

function menuActive(path){
    // 先重置所有菜单为未选中状态
    $('.is_active a img').attr('src', imagelink2).removeAttr('style');
    // 匹配当前path的菜单设置为选中状态
    $(`.is_active a[data-link="${path}"] img`).attr('src', imagelink).css("margin-top", "10px");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:54:05