【问题标题】:Expanding and collapsing multiple neighboring divs within the same parent element在同一个父元素中展开和折叠多个相邻的 div
【发布时间】:2023-03-16 23:45:01
【问题描述】:

我正在为这段代码苦苦挣扎,我不确定它是否可能。我在单个父元素中有一个 div 列表,我需要折叠和展开某些集合。这是一个例子:

<div id="parent">
  <div class="alway_show">ALWAYS SHOW ME</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="alway_show">ALWAYS SHOW ME</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
</div>

因此,在初始状态下,.collapse_me 将为 display:none。 always show 中会有一个链接,仅用于展开特定 .always_show div 下方的折叠 div。我知道如果可折叠的 div 位于它们自己的 div 中,这将容易一千万倍,但我无法控制代码。我必须让它像使用 jquery 一样工作。可能吗?

【问题讨论】:

    标签: jquery html collapse


    【解决方案1】:
    $('div.always_show').nextAll().each(function() {
        if($(this).is('.collapse_me')) {
            $(this).toggle();
        }
        else {
            //this will halt the each "loop", stopping before the next .always_show
            return false; 
        }
    });
    

    当然,你不应该使用我的初始选择器'div.always_show',而是提供实际元素,这将是点击链接的父元素。例如:

    $('#expand_anchor').parent().parent().nextAll()...
    

    【讨论】:

      【解决方案2】:
      var fncdiv = function(){
          var el = this;
          do{
              el = $(el).next();
              if ($(el).hasClass("collapse_me") )
                  $(el).toggle();
              else
                  break;
      
          }while (true) 
      };
      
      $('#parent div.alway_show').bind("click", fncdiv);
      

      【讨论】:

        【解决方案3】:

        您不需要使用 jQuery。它只需要一些巧妙的 CSS:

        #parent
        {
            /* normal parent css here */
        }
        
        #parent div
        {
          display: block;
        }
        
        #parent.collapsed
        {
            display: block;
        }
        
        #parent.collapsed div
        {
          display: none;
        }
        

        选择器按特定顺序应用。由于“#parent.collapsed div”比“#parent div”更具体,它应该覆盖。现在,您需要做的就是设置父 div 的类,然后您就完成了。您可以在运行时使用 javascript 将“折叠”类添加/删除到 DIV 以切换扩展,而无需任何额外的努力:

        // Mootools:
        $('parent').addEvent('click', function()
        {
          $('parent').toggleClass('collapsed')
        });
        

        【讨论】:

        • 我认为他希望它可以动态折叠/扩展,而不是静态的 css。特别是因为它最初会被隐藏,并且链接会让它们显示出来。
        • 我明白这一点。我只是提供了 CSS 的一半问题。使用任何类型的 javascript,无论是 native、jquery、mootools 还是其他的,他仍然可以动态地将折叠的类添加和删除到 div。通过使用上面的 CSS,它极大地简化了问题。
        • 我认为 geowa4 对如何使用 CSS 来简化这个问题的误解是 jQuery 引入的真正问题之一。人们希望仅使用 jQuery 解决问题,使用 CSS 可以更有效地解决问题,并且仅在 CSS 失败时使用脚本。不要这么快就放弃 CSS……它在处理事情上比 jQuery 更有效率。尽量使用CSS,直到不能使用,然后才用jquery/script 填补GAPS。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 2018-07-07
        • 2013-10-10
        • 2022-11-19
        • 2018-12-13
        • 1970-01-01
        相关资源
        最近更新 更多