javascript - 使用 jQuery 渐进式显示

标签 javascript jquery html

我嵌套了无序列表。

<ul id="catalogue">
    <li>List
        <ul>
            <li>Item 1</li>
            <li>Item 2
                <ul>
                    <li>Item 1.1</li>
                    <li>Item 1.2
                        <ul>
                            <li>Item 1.2.1</li>
                            <li>Item 1.2.2
                                <ul>
                                    <li>Item 1.2.2.1</li>
                                </ul>
                            </li>
                            <li>Item 1.2.3</li>
                        </ul>
                    </li>
                    <li>Item 1.3</li>
                </ul>
            </li>
            <li>Item 3</li>
        </ul>
    </li>
</ul>

一开始只显示最顶层,但是如果您单击每个 LI,如果其中有子 UL,它应该显示下一个控制杆,依此类推。如果您再次单击同一个 LI,下面的级别应该会隐藏。

$(document).ready(function () {
    $('#catalogue li').each(function () {
        $(this).contents().first().wrap("<span/>")
    });
    $('#catalogue li > span').addClass('brd');

    $('ul').hide();
    $('#catalogue').show();

    $('#catalogue li').click(function () {
        var nxt = $(this).children('ul:first')
        if ($(nxt).is(":visible")) {
            $(nxt).slideUp();
        } else {
            $(nxt).slideDown();
        }
        $(this).parent().show();
    });

});

如果用户单击同级 LI 并且它有一个子 UL,则该 UL 应显示,但任何同级的 UL 应关闭。

最佳答案

您需要阻止事件传播到父级。单击每个 li 将调用其自己的单击处理程序,并且该事件将传播到其父 li 调用其处理程序,依此类推。因此,您可以使用 event.stopPropagation() 在某一级别停止它。您可以使用 slideToggle 来切换元素的当前状态。

尝试:

$('#tree li').click(function (e) {
    e.stopPropagation();
    $(this).children('ul:first').slideToggle();
});

<强> Demo

如果您想在单击其同级时向上滑动,

$('#tree li').click(function (e) {
    e.stopPropagation();
    var $this = $(this);
    $this.children('ul:first').slideToggle().end()
               .siblings().children('ul:visible').slideUp();
    //Code Broken down
    //$this.children('ul:first').slideToggle();
    //$this.siblings().children('ul:visible').slideUp();
});

<强> Demo

关于javascript - 使用 jQuery 渐进式显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19990177/

相关文章:

javascript - window.open 不重用现有的命名窗口吗?

JavaScript for/循环作用域

javascript - 禁用浏览器页面中的 PDF 加载

javascript - 它不会悬停或让我点击我图库中的图片

javascript - JQuery:重用提交功能

html - 背景图像不渲染图像

javascript - 如何根据文本字段输入Reactjs获取完整的响应数据

php - 编写 jquery colorbox 组的更简洁的方法?或检测有多少类并相应地回显

javascript - 如何重构 2 个相同的函数?

html - 如何控制 CSS 箭头大小