我正在试图运行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
的孩子,我想从{@ 1}}和/或collapse
中找到该班级之前的任何家长级别的open
和/或open
{ {1}}。也许我累了,但我有这个严重缺陷的逻辑,在我的脑海中,我试图理解它,同时我觉得它不合逻辑,而且必然会有一个更简单的方法来做到这一点。 (请注意,我目前正在尝试的$.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');
}
}
}
});
答案 0 :(得分:2)
$('ul.open:has(li.open)').removeClass('open collapse');
使用UL
类查找所有.open
,并检查它们是否包含LI
类.open
,如果是,请同时删除open
和collapse
课程(如果有)。
答案 1 :(得分:1)
如果您在顶部ul
放置某种标识符或类别,则可以执行以下操作:
$('.collapse .open')
.parentsUntil('#root', 'ul.collapse')
.removeClass('collapse');
编辑:这是一个证明:http://jsfiddle.net/vA5Gu/
的jsfiddle此外,即使问题中没有说明,听起来您可能也想删除collapse
类的元素上的open
类?如果是这样,您只需要添加addBack()
命令。如,
$('.collapse .open')
.parentsUntil('#root', 'ul.collapse')
.addBack()
.removeClass('collapse');
此处演示了这一点:http://jsfiddle.net/vA5Gu/1/
答案 2 :(得分:0)
不确定我是否清楚地解决了这个问题,但这会有效吗?
$('.collapse.open').each(function(){
$(this).closest('ul.collapse').removeClass('collapse');
});
答案 3 :(得分:0)
$('.collapse .open').each(function(){
$(this).parent().removeClass('collapse');
});
我认为这会奏效。我需要在小提琴中进行测试。
答案 4 :(得分:0)
尝试
$('.collapse.open').each(function(){
$(this).parents('ul.collapse, ul.open').removeClass('collapse open');
});