我有三层菜单:
HTML格式:

<ul class="main-menu">
    <li><a href="#">About</a></li>
    <li>
        <a href="#">Blog</a>
        <ul class="level2">
            <li>
                <a href="#">item1</a>
                <ul class="level3">
                    <li><a href="#">item 3</a></li>
                    <li><a href="#">item 4</a></li>
                </ul>
            </li>
            <li><a href="#">item2</a></li>
        </ul>
    </li>
    <li><a href="#">Contact</a></li>
</ul>

CSS:
.main-menu li a {
    color: #000;
}
.level3,
.level2 {
    display: none;
}
.main-menu li.active .level2 {
    display: block;
}

.level2 li.active .level3 {
    display: block;
}

脚本:
$('.main-menu > li').click(function () {
    $(this).toggleClass('active');
});

$('.level2 > li').click(function () {
    $(this).toggleClass('active');
});

问题是,当我单击第二个级别的元素时,第三个级别的列表不会打开。怎么解决?如何重构代码以避免重复?
DEMO

最佳答案

使用event.stopPropagation()tp防止从子元素到父元素的事件bubling。
DEMO

$('.main-menu > li').click(function () {
    $(this).toggleClass('active');
    $('.level2 > li').removeClass('active');
});

$('.level2 > li').click(function (event) {
    $(this).toggleClass('active');
    event.stopPropagation();
});

10-05 18:40