【问题标题】:collapse in hide or show do it from js在隐藏或显示中折叠从 js 执行
【发布时间】:2016-04-12 03:13:19
【问题描述】:

我编写了一些控制单元,通过使用引导程序中的“折叠”类来切换几个容器,例如带有锚点的列表,该锚点对我的隐藏容器“href”属性具有特殊意义,这里是两个可以描述行为的列表元素的示例:

<div id="my_list">
  <ul>
  <li class="active">
    <a onclick="return false" data-parent="#switch_tables" href="#collapse1">One</a>
  </li>
  <li>
    <a onclick="return false" data-parent="#switch_tables" href="#collapse2">Two</a>
 </li>
</div>

然后在 html 代码中我使用一些容器:

<div id="switch_tables" class="panel">
    <div id="collapse1" class="collapse in"> SOME IN HERE </div>
    <div id="collapse2" class="collapse"> SOMETHING ELSE</div>
</div>

所以当我使用这些东西并且列表的第一个元素处于活动状态时,第一个容器也会显示,因为我在“折叠”类之后添加了“in”类。当我切换到另一个列表元素时,第一个容器应该消失,第二个应该显示。当然,我有更多的列表链接和更多的隐藏容器,而不仅仅是 2,但这只是一个例子。我想做的事情是防止默认行为并通过单击来禁止活动元素隐藏。

所以我通过单击列表项来切换“活动”列表元素,并显示或隐藏与列表具有相同 id 的确切容器,因此容器与列表项链接,这由 js 代码完成:

$(function(){
    $('ul li a').on('click', function(){
        $(this).parent().addClass('active').siblings().removeClass('active');

        var to_toggle = $(this).attr('href');
        $('.collapse.in').collapse('hide');
        $(to_toggle+':not(".in")').collapse('show');
    });
});

现在我看到当我在列表项之间切换时,容器会正确显示和隐藏。

当我点击第二个链接时,我看到第一个容器是如何隐藏的,而第二个是如何出现的,反之亦然。

想法是,如果有打开的容器,那些有“collapse in”类的应该被js关闭,但是如何禁止关闭一个活动的容器?

例如,我单击列表中的第二个链接,我的第一个容器隐藏,第二个出现,我再次单击第二个链接,第二个容器消失,所以我在屏幕上看不到任何内容。但列表项处于活动状态。

所以问题是如何修改 js,以便一次只能有一个容器“折叠”类,并且在用户将其切换到其他容器之前,没有任何东西可以删除它,因此“in”类将移动到其他容器来自锚属性“href”并且不能在这个地方删除?

【问题讨论】:

    标签: javascript jquery twitter-bootstrap-3


    【解决方案1】:

    如果您使用的是 bootstrap ,那么您可以使用 bootstrap 折叠功能,例如:

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Collapse</title>
      <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
    
      <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
      <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
      <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
        <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
      <![endif]-->
    </head>
    <body>
    
    <div class="container">
    
      <div class="page-header">
        <h1>Collapse <small>Bootstrap Visual Test</small></h1>
      </div>
    
      <div class="panel-group" id="accordion">
        <div class="panel panel-default">
          <div class="panel-heading">
            <h4 class="panel-title">
              <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
                Collapsible Group Item #1
              </a>
            </h4>
          </div>
          <div id="collapseOne" class="panel-collapse collapse in">
            <div class="panel-body">
         Collapse one content
            </div>
          </div>
        </div>
        <div class="panel panel-default">
          <div class="panel-heading">
            <h4 class="panel-title">
              <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
                Collapsible Group Item #2
              </a>
            </h4>
          </div>
          <div id="collapseTwo" class="panel-collapse collapse">
            <div class="panel-body">
             Collapse two content
            </div>
          </div>
        </div>
      </div>
    
    </div>
    
    <!-- JavaScript Includes -->
    <script src="../vendor/jquery.min.js"></script>
    <script src="../../transition.js"></script>
    <script src="../../collapse.js"></script>
    
    </body>
    </html>
    

    【讨论】:

    • 我在仅折叠功能的上下文中使用引导程序,即它是展开/折叠的动画。所以我不想使用按钮左右。 :)
    【解决方案2】:

    所以我从@Zigri2612 逐点解决了我的问题,但使用了一些不同的方法:

    $(function(){
        $('ul li a').on('click', function(){
            $(this).parent().addClass('active').siblings().removeClass('active');
    
            var to_toggle = $(this).attr('href');
    
            $("#switch_tables").find('div').each(function(){
                if ( ('#'+$(this).attr("id")) != to_toggle )
                    $(this).filter('.collapse.in').collapse('hide');
            });
    
            $(to_toggle+':not(".in")').collapse('show');
        });
    });
    

    【讨论】:

    • 我的方法有效并且不允许隐藏活动容器,Zigri2612 忘记使用“to_toggle”变量。
    • 我只是建议想法,但您不被欣赏。我发布了更好的溶胶。在适应你的解决方案之后......
    【解决方案3】:

    这是 collapse hide 和 show 的工作示例。这里的加号和减号icons 正在改变。您可以根据需要对其进行更改。

     $(document).ready(function(){
            // Add minus icon for collapse element which is open by default
            $(".collapse.show").each(function(){
                $(this).prev(".card-header").find(".fa").addClass("fa-minus").removeClass("fa-plus");
            });
            
            // Toggle plus minus icon on show hide of collapse element
            $(".collapse").on('show.bs.collapse', function(){
                $(this).prev(".card-header").find(".fa").removeClass("fa-plus").addClass("fa-minus");
            }).on('hide.bs.collapse', function(){
                $(this).prev(".card-header").find(".fa").removeClass("fa-minus").addClass("fa-plus");
            });
        });
        .bs-example{
            margin: 20px;
        }
        .accordion .fa{
            margin-right: 0.5rem;
        }
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <style>
    
    </style>
    
    
    <div class="bs-example">
        <div class="accordion" id="accordionExample">
            <div class="card">
                <div class="card-header" id="headingOne">
                    <h2 class="mb-0">
                        <button type="button" class="btn btn-link" data-toggle="collapse" data-target="#collapseOne"><i class="fa fa-plus"></i> What is HTML?</button>                                  
                    </h2>
                </div>
                <div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordionExample">
                    <div class="card-body">
                        <p>HTML stands for HyperText Markup Language. HTML is the standard markup language for describing the structure of web pages. <a href="https://www.tutorialrepublic.com/html-tutorial/" target="_blank">Learn more.</a></p>
                    </div>
                </div>
            </div>
            <div class="card">
                <div class="card-header" id="headingTwo">
                    <h2 class="mb-0">
                        <button type="button" class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseTwo"><i class="fa fa-plus"></i> What is Bootstrap?</button>
                    </h2>
                </div>
                <div id="collapseTwo" class="collapse show" aria-labelledby="headingTwo" data-parent="#accordionExample">
                    <div class="card-body">
                        <p>Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development. It is a collection of CSS and HTML conventions. <a href="https://www.tutorialrepublic.com/twitter-bootstrap-tutorial/" target="_blank">Learn more.</a></p>
                    </div>
                </div>
            </div>
            <div class="card">
                <div class="card-header" id="headingThree">
                    <h2 class="mb-0">
                        <button type="button" class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseThree"><i class="fa fa-plus"></i> What is CSS?</button>                     
                    </h2>
                </div>
                <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample">
                    <div class="card-body">
                        <p>CSS stands for Cascading Style Sheet. CSS allows you to specify various style properties for a given HTML element such as colors, backgrounds, fonts etc. <a href="https://www.tutorialrepublic.com/css-tutorial/" target="_blank">Learn more.</a></p>
                    </div>
                </div>
            </div>
        </div>
    </div>

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2017-07-21
      • 1970-01-01
      • 2018-11-28
      • 2012-08-17
      • 1970-01-01
      • 2014-01-22
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多