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');