2

我正在尝试运行一UL组:

<ul>
    <li>
        <h2>Header 1</h2>
        <ul class="collapse">
            <li>A</li>
            <li>B</li>
            <li>C</li>
            <li>D</li>
            <li>E</li>
        </ul>
    </li>
    <li>
        <h2>Header 2</h2>
        <ul class="collapse">
            <li>A</li>
            <li>B</li>
            <li>C</li>
            <li>D</li>
            <li>
                <h2>Header 3</h2>
                <ul class="collapse">
                    <li>A</li>
                    <li>B</li>
                    <li>C</li>
                    <li>D</li>
                    <li>
                        <h2>Header 4</h2>
                        <ul class="collapse open">
                            <li>A</li>
                            <li>B</li>
                            <li>C</li>
                            <li>D</li>
                            <li>E</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

如果我发现其中一个具有该班级的孩子,open我想删除该班级collapse和/或open从该班级之前的任何父级别 UL 中找到open. 也许我累了,但我有这个严重缺陷的逻辑,在我的脑海里我试图理解它,同时我觉得它不合逻辑,而且肯定会有更简单的方法来做到这一点。(请注意,$.each()我目前正在尝试的是有缺陷的并且无论如何都不起作用)。但是如果有人去的话,我可以使用一些想法来解决这个问题。

$('ul').each(function()
{
    if($(':not(:first)', this))
    {
        if($(this).hasClass('collapse'))
        {
            alert('collapse found');
            $kid = $(this).child('ul');

            if($kid.hasClass('open'))
            {
                alert('uh')
                $kid.parents('ul').removeClass('collapse');
            }
        }
    }
});
4

5 回答 5

2
$('ul.open:has(li.open)').removeClass('open collapse');

UL在类中查找 all .open,并检查它们是否包含LI.open类的 a,如果是,则删除两者opencollapse类(如果存在)。

于 2013-03-28T17:20:24.323 回答
1

如果您在 top 上放置某种标识符或类ul,则可以执行以下操作:

$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .removeClass('collapse');

编辑:这是一个 jsfiddle 来演示:http: //jsfiddle.net/vA5Gu/

另外,即使问题中没有说明,听起来您可能还想删除带有类collapse的元素上的open类?如果是这样,您只需要添加addBack()命令。例如,

$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .addBack()
    .removeClass('collapse');

此处演示:http: //jsfiddle.net/vA5Gu/1/

于 2013-03-28T17:19:19.040 回答
0

不确定我是否清楚地解决了这个问题,但这会起作用吗?

$('.collapse.open').each(function(){
    $(this).closest('ul.collapse').removeClass('collapse');
});
于 2013-03-28T17:16:59.890 回答
0
$('.collapse .open').each(function(){
    $(this).parent().removeClass('collapse');
});

我认为这会奏效。我需要在小提琴中进行测试。

于 2013-03-28T17:17:14.707 回答
0

尝试

$('.collapse.open').each(function(){
    $(this).parents('ul.collapse, ul.open').removeClass('collapse open');
});
于 2013-03-28T17:20:09.120 回答