【问题标题】:Keep tab active class across different pages跨不同页面保持选项卡活动类
【发布时间】:2014-10-11 09:16:29
【问题描述】:

我找不到似乎不是指一个页面中的标签而不是跨多个页面的答案,所以......我们在这里!

我有这段代码出现在几个页面中,代表一个标签效果:

<ul id="teams-tabs" class="content-tabs-main group">
    <li><a href="http://localhost/first-team/">1st team<span></span></a></li>
    <li><a href="http://localhost/reserves/">Reserves<span></span></a></li>
</ul>

当用户访问例如第一队主页或第一队的子页面时,使用以下代码将第一队标签设置为活动状态:

$(document).ready(function(){
    var current_url = window.location.href;     
    $(".content-tabs-main li a").each(function(){
        var main_tab_href = $(this).attr("href");
        if (current_url.indexOf(main_tab_href) > -1) {
            $(this).parent().addClass("active-main-tab");
        }
    });
});

这一切都很好,但是每次重新加载页面或访问 first team 的子页面时都会刷新 html,因此每次活动状态都会闪烁,然后再次打开,这有点烦人。

如果页面需要,有没有人可以在不先切换回默认“关闭”状态的情况下保留活动状态的解决方案?

谢谢,

迈克

【问题讨论】:

    标签: jquery class tabs


    【解决方案1】:

    最简单的方法是简单地将页面的当前 URL 与 &lt;a&gt; 元素的 href 进行比较;如果它们相同,那么这就是您所在的页面:

    $('a').filter(function(){
        // note that we're using the 'href' property, not the attribute, to
        // get an absolute URL rather than a, potentially, relative URL (this
        // is why we're using filter() rather than an attribute selector)
        return this.href === window.location;
    }).closest('li').addClass('active-main-tab');
    

    或者,如果您的 HTML 类似于:

    <ul>
        <li><a href="http://example.com/first-team">First Team</a>
            <ul>
                <li><a href="#captain">Captain</a></li>
                <li><a href="#striker">Striker</a></li>
            </ul>
        </li>
    </ul>
    

    并且,在链接到#captain 之后,您希望#captain first-team &lt;li&gt; 元素都处于活动状态:

    $('a').filter(function(){
        return this.hash === window.location.hash || this.href === window.location;
    }).closest('li').addClass('active-main-tab');
    

    【讨论】:

    • 感谢您的快速回复。只是为了澄清一下,上面的代码是否旨在将活动状态简单地添加到相关选项卡,但是以一种在 href 和 url 比较中留出更少的错误余地的方式?如果是这样,我很感激并会使用它,但我看不到任何将活动选项卡状态带到下一页或刷新同一页面的东西......
    • 在任何给定场合都不需要显式运行代码,但是如果您在$(document).ready(function(){ /* in here */ }); 上运行它,那么它将在页面加载时运行(因此将在下一页上运行)。我不知道你的意思是“为 href 和 url 留下更少的错误余地......”(我明白这些话,但不是你的意图)。
    • 我想做的是根据当前 url 检查 href 并添加一个活动选项卡状态(就像你在这里所做的那样),但是如果当前页面被刷新,例如,活动state 应该保持不变,而不是首先将 html 重置为其默认状态 no class,从而导致效果一闪而过。如果您的代码确实这样做并且我只是无知,您介意简要解释一下它是如何工作的吗?否则,我希望这能说明我做得更好!
    • 啊,不;当 JavaScript 执行和运行时,总会有一个(潜在的)'flash'; JavaScript 无法影响另一个页面的行为;如果您不能容忍这种有希望(但不能保证)的微小更新延迟,那么您可能需要分配给定页面服务器端的活动状态。
    • 太棒了!我们现在在同一个页面上 :) 那需要 PHP 或 AJAX 吗?如果是这样,您有什么建议可以为我指明正确的方向吗?我对 PHP 相当满意,但对 AJAX 不太满意。另外,在您看来,更新延迟会让用户感到沮丧,还是我过于挑剔?
    猜你喜欢
    • 2016-01-31
    • 2020-08-30
    • 1970-01-01
    • 2022-01-02
    • 2021-02-15
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多