如何基于哈希使菜单项处于活动状态

时间:2014-10-20 作者:Tovly Deutsch

我正在使用Simone主题创建Wordpress公文包网站。我有三个菜单项链接到同一页,但哈希不同:

tovly.com/work/#work-all-work

tovly.com/work/#work-photos

tovly.com/work/#work-videos

问题是,无论url中有什么哈希,所有三个菜单项都设置为活动。在上述三个URL中,导航菜单如下所示:

我想要的是tovly的导航栏。com/work/#将所有工作按如下方式进行:

enter image description here

我也希望tovly有同样的效果。com/work/#工作照片和玩具。com/work/#工作视频。

我该怎么做?

2 个回复
SO网友:RiddleMeThis

通过检查URL,然后将适当的链接设置为active,可以很容易地实现这一点。

这可以通过以下方式实现。。。

var hash = window.location.hash.substr(1);  // Get the text after the hash
$(\'a[href="#\' + hash + \'"]\').addClass(\'active\'); // Set the correct link to active
然而,有一些事情需要考虑。有人可以从已经有哈希的链接访问此页面,因此需要在页面加载时运行代码。此外,哈希值可以在页面内更改,因此每次单击带有#的链接时,我们都需要进行检查。

这是我的工作/测试示例。。。

$(document).ready(function () {

    function setActive() {
        setTimeout(function () {
            var hash = window.location.hash.substr(1);

            if (hash) {
                $(\'a[href*="#"]\').removeClass(\'active\');
                $(\'a[href="#\' + hash + \'"]\').addClass(\'active\');
            }
        }, 15);
    }

    setActive(); // On Page Load

    $(\'a[href*="#"]\').click(function () { // On link click
        setActive();
    });

});
Note: 之所以使用setTimeout,是因为从单击链接到更新实际URL都有一点延迟

Note 2: 这将直接在锚点上设置和取消设置活动类。您可能希望在父元素(如li或div)上设置类。您可以通过添加来实现这一点。添加和删除类选择器后的parent()。

例如

$(\'a[href*="#"]\').parent().removeClass(\'active\');
$(\'a[href="#\' + hash + \'"]\').parent().addClass(\'active\');

SO网友:Ashok Kumar Nath

尝试将setInterval方法和window相结合。地方搞砸这没有经过测试,但类似的内容应该很有用:

jQuery(function($) {
    setInterval(function() {
        var tag = window.location.hash;
        $(\'.main-menu ul li\').removeClass(\'active-menu\');
        $(\'.main-menu ul li#\' + tag).addClass(\'active-menu\');
    }, 100);
});
您需要更改第4行和第5行中的菜单类和结构。

结束

相关推荐

Add Protocol to Custom Menus

我一直在使用tel: 自定义菜单中的链接与响应性设计相结合,为我的智能手机主题添加了“立即呼叫”按钮。它一直运行良好。一位客户刚刚要求我也添加一个“发送文本”按钮。我想我会用sms: 它似乎有可接受的设备支持。然而,当我保存菜单时,WordPress将其从URL中删除。经过研究,我得出结论,这与esc_url() 和/或wp_kses() (参见Trac ticket #18268). 我编造了以下代码,试图自己添加SMS协议并将其放入函数中。php:<?php function add_n