javascript - 激活 jQuery UI Accordion 菜单中的当前内容部分

标签 javascript jquery html jquery-ui jquery-ui-accordion

我正在尝试找出如何动态激活 jQuery UI Accordion 的正确内容部分菜单取决于当前正在查看的页面。我进行了广泛的搜索,似乎其他人过去也遇到过这个问题,但我还没有找到适合我的解决方案。我知道可以设置 active 来打开菜单的某个索引,但我需要动态地执行此操作。

我认为我可以使用 activate 方法实现我想要的目标,但我似乎无法弄清楚。我不想设置 cookie,因为这通常不适用于后退/前进按钮以及通过特定 URL 的直接导航。有人有主意吗?提前致谢!

这是我的菜单的简化结构:

<div id="menu">
    <div id="sections">
        <div class="grouping accordion">
            <a id="heading1" href="#">Heading #1</a>
            <div class="sub-items">
                <a href="/item1">Item #1</a>
                <br />
                <a href="/item2">Item #2</a>
            </div>
        </div>
        <div class="grouping accordion">
            <a id="heading2" href="#">Heading #2</a>
            <div class="sub-items">
                <a href="/item4">Item #4</a>
                <br />
                <a href="/item5">Item #6</a>
            </div>
        </div>
    </div>
</div>

这是我的 jQuery Accordion 初始化:

$('#sections').accordion({
    header: '> .accordion > a',
    autoHeight: false,
    collapsible: true,
    active: false,
    animated: 'slide'
});

例如,如果您当前位于 /item4 页面,则应展开标题 #2 下的组。

编辑: 我找到了一个似乎非常好的解决方案,并将其作为答案发布在下面,希望这对遇到类似问题的人有所帮助!

最佳答案

要激活特定选项卡,您需要使用 accordion('activate', index) 方法。示例:

$( "#sections" ).accordion('activate', 2);

但是,您将需要定义每页索引键的东西。您甚至可以动态生成它。我可能会创建一个 Pages 对象:

Pages = {
    "heading1" : {
        "id": 1,
        "is_active": false,
        "items": {
            "item1": {
                "href": "item1",
                "name": "Item #1"
            },
            "item2": {
                "href": "item2",
                "name": "Item #2"
            }
        }
    },

    "heading2" : {
        /* etc*/    
    },

}

使用一些 hackish jQuery 魔法,你可以循环浏览你的标题

var active_heading_index = null;

$.each(Pages, function(heading) {
    $.each(heading.items, function(item) {
        if($(location).attr('href') == item.href) {
            heading.is_active = true;
            // or
            active_heading_index = heading.id
        }
    });
});

if(active_heading_index) $( "#sections" ).accordion('activate', active_heading_index);

无论如何,我确信有更干净、更有效的方法来做到这一点。

关于javascript - 激活 jQuery UI Accordion 菜单中的当前内容部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181610/

相关文章:

javascript - Javascript 和 Flash 通信的 Mozilla Firefox 问题

javascript - 使用 DOMContentReady 被 Google 视为反模式

javascript - 如何在表格中查找单元格的行号和列号

html - 如何在 Bulma CSS 中内联放置背景图像和文本?

javascript - 将事件监听器从 jQuery 转换为 native Javascript

jquery - 使用 HTML5 & Canvas 还是 CSS3(背景图片) & jquery 制作幻灯片更好?

jquery - 了解 jQuery 教程模块模式示例

javascript - Cycle2 多张幻灯片

css - 缩小浏览器窗口时 HTML div 元素重叠

不同元素上的 JavaScript mousedown 和 mouseup