首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jquery切换“孩子”

jquery切换“孩子”
EN

Stack Overflow用户
提问于 2011-03-08 05:24:29
回答 5查看 960关注 0票数 0

我不能在这里使用.children(),它不会起作用,因为从技术上讲,他们不是孩子。以此作为我的html,

代码语言:javascript
运行
复制
    <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()函数

代码语言:javascript
运行
复制
    $('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;
      }
    });

这似乎失败了,因为它被赋予了单个元素,而不是一组元素。我真的不知道如何做到这一点。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-08 05:37:50

您必须使用nextUntil。它将从您传递的元素中查找下一个元素,直到它到达与您传递给它的选择器匹配的内容为止。

代码语言:javascript
运行
复制
$(".l1").click(function() {
    $(this).nextUntil(".l1").toggle()
})

Demo

请考虑使用嵌套的<ul><li>

祝好运!

票数 3
EN

Stack Overflow用户

发布于 2011-03-08 05:35:08

听起来您需要nextAll,它允许您获取与选择器匹配的所有以下元素。请参阅http://api.jquery.com/nextAll/

另外,我认为它失败了,因为你的else if应该是:

代码语言:javascript
运行
复制
else if($(topobj).next().hasClass('l3'))
                                 // ^---- l3 instead of l1

(除非某个地方有拼写错误,因为你说你希望它继续下去,直到找到另一个l1,但实际上并没有)

此外,请参阅Intelekshual在下面关于nextUntil的评论中发布的内容。这可能就是你想要的。

票数 1
EN

Stack Overflow用户

发布于 2011-03-08 05:37:31

nextUntil是您需要的遍历函数:

代码语言:javascript
运行
复制
$('p.l1).nextUntil('p.l1')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5225437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档