Javascript jQuery,反向$。每种类型?

Javascript jQuery,反向$。每种类型?,javascript,jquery,dom,Javascript,Jquery,Dom,我正在尝试运行UL设置: <ul> <li> <h2>Header 1</h2> <ul class="collapse"> <li>A</li> <li>B</li> <li>C</li> <li>D</li&g

我正在尝试运行
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>

不确定我是否清楚地了解了这个问题,但这行得通吗

$('.collapse.open').each(function(){
    $(this).closest('ul.collapse').removeClass('collapse');
});

我想这会管用的。我需要在小提琴上进行测试。

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

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

编辑:下面是一个要演示的JSFIDLE:

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

$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .addBack()
    .removeClass('collapse');
这里演示了这一点:

试试看

$('.collapse.open').each(function(){
    $(this).parents('ul.collapse, ul.open').removeClass('collapse open');
});

使用
.open
类查找所有
UL
,并使用
.open
类检查它们是否包含
LI
,如果是,则删除
open
collapse
类(如果存在)。

这是一个好主意,不幸的是,我认为这与我所寻求的格格不入。最初我使用的是
$('ul:first child').find('ul.open').removeClass('collapse-open')
作为我做我需要的事情的手段,然后我意识到偶尔会出现这样的情况:父元素中的一个子元素可能有一个类具有
打开的
。如果有,父元素不想,我想从该初始子元素(以及最初使用open找到的子元素)的所有父元素中删除open和collapse类,这实际上是可行的(不幸的是,我坚持使用jQuery 1.4及其最早采用的
parentsUntil()
)。因此,
addBack()
对我不起作用,但是第一个版本很好。唯一的问题是,在这些类删除之前,所有的家长都会找到,然而,可以说,激发这些类的孩子仍然停留在需要删除的类上。实际上,他们添加了一个
removeClass()
,然后剩下的孩子解决了这个问题,爱链。。
$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .addBack()
    .removeClass('collapse');
$('.collapse.open').each(function(){
    $(this).parents('ul.collapse, ul.open').removeClass('collapse open');
});
$('ul.open:has(li.open)').removeClass('open collapse');