我不能在这里使用.children(),它不会起作用,因为从技术上讲,他们不是孩子。以此作为我的html,
<p class="l1">A</p>
<p class="l2">A1</p>
<p class="l2">A2</p>
<p class="l2">A3</p>
<p class="l2">A4</p>
<p class="l3">A41</p>
...
我尝试做的是slideToggle p.l1
之后的所有p.l2
元素,直到它到达另一个p.l1
。代码折叠的排序,但没有嵌套的子代。我想不出该怎么做。
我现在得到的不能工作,似乎挂起了浏览器。似乎没有.descendents()函数
$('p.l1').live('click', function()
{
var topobj = $(this);
var done = true;
while(done)
{
if($(topobj).next().hasClass('l2'))
{
$(topobj).next().slideToggle(100);
topobj = $(topobj).next();
}
else if($(topobj).next().hasClass('l1'))
done = false;
}
});
这似乎失败了,因为它被赋予了单个元素,而不是一组元素。我真的不知道如何做到这一点。
发布于 2011-03-08 05:37:50
您必须使用nextUntil
。它将从您传递的元素中查找下一个元素,直到它到达与您传递给它的选择器匹配的内容为止。
$(".l1").click(function() {
$(this).nextUntil(".l1").toggle()
})
Demo
请考虑使用嵌套的<ul>
和<li>
。
祝好运!
发布于 2011-03-08 05:35:08
听起来您需要nextAll
,它允许您获取与选择器匹配的所有以下元素。请参阅http://api.jquery.com/nextAll/
另外,我认为它失败了,因为你的else if
应该是:
else if($(topobj).next().hasClass('l3'))
// ^---- l3 instead of l1
(除非某个地方有拼写错误,因为你说你希望它继续下去,直到找到另一个l1,但实际上并没有)
此外,请参阅Intelekshual在下面关于nextUntil
的评论中发布的内容。这可能就是你想要的。
发布于 2011-03-08 05:37:31
nextUntil
是您需要的遍历函数:
$('p.l1).nextUntil('p.l1')
https://stackoverflow.com/questions/5225437
复制相似问题