顶级Accordion中的Jquery UI嵌套手风琴内容

时间:2013-01-31 00:03:37

标签: jquery user-interface nested accordion

我正在尝试创建一个包含多个组织级别的导航菜单。我正在构建一个嵌套的jQuery UI手风琴,如果所有内容都在手风琴的最低级别(最深)嵌套中,那么它非常有用。问题是有些元素会有内容和副手风琴。如果我在顶部手风琴旁放置一些文字,它看起来很棒......但是一旦我将它包裹在标签中,它就会打破该元素中的嵌套手风琴

这是我试图让它看起来像的样机 Photo Mockup

我目前的HTML

    <div id="faqs-container" class="accordian">
    <h3><a href="#">One</a></h3>

   <div class="accordian">
           I really want a list here!
        <h3><a class=href="#">A</a></h3>
        <div>
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
            </div>
        <h3><a href="#">B</a></h3>
        <div>    
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
       </div>
    </div>
    <h3><a href="#">Two</a></h3>
    <div class="accordian">
         <ul>
                <li>But They</li>
                <li>Do Not</li>
                <li>Work</li>
            </ul>
        <h3><a href="#">A2</a></h3>
        <div>
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
        </div>
        <h3><a href="#">B2</a></h3>
        <div>
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
        </div>
    </div>
</div>

Jquery的

 $("div.accordian").accordion({
        autoHeight: false,
        collapsible: true,
        active: false

    });

运行这样的代码会为第一部分生成一个好的嵌套手风琴,但第二部分渲染不正确。看起来jQuery开始在标头之后抓住第一个html元素来构建手风琴。

我在调用accordian时指定了header选项,如下所示

$("div.accordian").accordion({
    autoHeight: false,
    collapsible: true,
    active: false,
    header: 'h3'

});

这接近期望的效果。列表呈现在正确的位置,但第二部分中的嵌套手风琴不起作用。

我设置了Fiddle

2 个答案:

答案 0 :(得分:6)

这应该有效

<div id="faqs-container" class="accordian">
    <h3><a href="#">One</a></h3>

   <div class="accordian">
           I really want a list here!
        <h3><a class=href="#">A</a></h3>
        <div>
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
            </div>
        <h3><a href="#">B</a></h3>
        <div>    
            <ul>
                <li>list</li>
                <li>list</li>
                <li>list</li>
            </ul>
       </div>
    </div>
    <h3><a href="#">Two</a></h3>
    <div> <-- A Wrapper -->
             <ul>
                    <li>But They</li>
                    <li>Do Not</li>
                    <li>Work</li>
                </ul>
         <div class="accordian">
            <h3><a href="#">A2</a></h3>
            <div>
                <ul>
                    <li>list</li>
                    <li>list</li>
                    <li>list</li>
                </ul>
            </div>
            <h3><a href="#">B2</a></h3>
            <div>
                <ul>
                    <li>list</li>
                    <li>list</li>
                    <li>list</li>
                </ul>
            </div>
        </div>
    </div>
</div>

演示:Fiddle

对于标签Two,您需要创建另一个包装元素,并将ul和子accordion作为其子项

答案 1 :(得分:2)

Check out this fiddle

你是正确的,它会查看标题之后的下一个元素,因此你可以用div来简单地包装顶级手风琴的内容,然后包括你的副手风琴。

<h3><a href="#">Two</a></h3>

    <div>  <!-- This wrapper -->
        <ul>
            <li>But They</li>
            <li>Do Not</li>
            <li>Work</li>
        </ul>
        <div class="accordian">
             <h3><a href="#">A2</a></h3>

            <div>
                <ul>
                    <li>list</li>
                    <li>list</li>
                    <li>list</li>
                </ul>
            </div>
             <h3><a href="#">B2</a></h3>

            <div>
                <ul>
                    <li>list</li>
                    <li>list</li>
                    <li>list</li>
                </ul>
            </div>
        </div>
    </div>