【问题标题】:Expand Collapse divs展开 折叠 div
【发布时间】:2017-02-12 22:12:51
【问题描述】:

我有不同的 div,我想点击一个 div 并展开它的内容,如果我再次点击它应该隐藏该内容,这工作正常,但我有不同的 div,我只想要一个 div 展开同时,我应该如何达到这个目标?

这不好,你看这个时候我可以扩展几个div,我怎样才能确保不会发生这种情况?:

这是我想要达到的:

JQuery 函数,当我点击一个新的 div 时,如何折叠任何其他展开的 div?:

  $(".contact_item .head").click(function () {
            if ($(this).parent('div').hasClass('expanded')) {
                $(this).next('div').slideUp();
                $(this).parent('div').removeClass('expanded');
            } else {
                $(this).parent('div').addClass('expanded');
                $(this).next('div').slideDown();
            }
        });

HTML代码:

<div class="container">
            <div class="row">
                <div class="col-lg-3 col-md-3 col-sm-3"> </div>
                <div class="col-lg-9 col-md-9 col-sm-9 white">
                    <div class="row">
                        <div class="col-lg-9 col-md-9 col-sm-8 col-xs-12 rghtpd"><style>.rghtpd{padding-right: 0px !important; width:583px;}</style>
                            <div class="title">Contact us</div>
                            <div class="row">
                                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
                                                                                                                                                    <div class="contact_item expanded">
                                            <div class="head">
                                                <div class="name">California office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: block;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        One Embarcadero Center Suite 500, San Fransisco, 94111, CA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (415) 639-3001
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">Florida office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        9600 Koger Blvd. Suite 225, St. Petersburg, 33702, FL
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (727) 578-2800
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">London office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        Lloyd's Building, Gallery 4 12 Leadenhall St., London, EC3V 1LP, England
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (0207) 101-9395
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">myName office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        123 Fake st , Springfield, 12345, OH
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        555
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                </div>
                                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
                                        <div class="contact_item expanded">
                                            <div class="head">
                                                <div class="name">Ohio office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: block;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        4449 Easton Way 2nd Floor, Columbus, 43219, OH
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (614)526-8754
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">Pennsylvania office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        One International Plaza Suite 550, Philadelphia, 19113, PA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (215) 279-5845
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">Texas office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        950 Echo Lane Suite 200, Houston, 77024, TX
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (832) 586-0301
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">WASH office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        1100 Dexter Avenue North Suite 100, Seattle, 98109, WA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (253)271-9692
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                </div>
                            </div>
                        </div>

更新:这是 CSS

 .contact_item {
        width: 100%;
        border: 1px solid #f1e7e0;
        background-color: #fcf6f5;
        margin: 3px 0px;
        float: left;

        &.expanded {
            .head .name {
                color: #f60;
            }

            .head .name span {
                border-color: #f60;
                color: #f60;

                &.plus {
                    display: none;
                }

                &.minus {
                    display: block;
                }
            }
        }

        .head {
            .name {
                font-family: "Tahoma";
                color: rgb(100, 100, 100);
                font-size: 11.1px;
                text-transform: uppercase;
                padding: 7px 15px;
                cursor: pointer;
                position: relative;

                span {
                    position: absolute;
                    display: block;
                    width: 20px;
                    height: 20px;
                    border-radius: 50%;
                    border: 1px solid #706f6f;
                    text-align: center;
                    right: 15px;
                    top: 7px;
                    font-size: 18px;
                    line-height: 17px;

                    &.minus {
                        display: none;
                    }
                }
            }
        }
    }

我对我的 JQuery 函数进行了一些更改,现在它只允许展开一个 div,但我必须单击两次才能展开一个 div,第一次它会关闭任何其他展开的 div 但不会打开那个我点击了,然后第二次打开:

  $(".contact_item .head").click(function () {            
            if ($(".contact_item .head").parent('div').hasClass('expanded')) {
                $(".contact_item .head").next('div').slideUp();
                $(".contact_item .head").parent('div').removeClass('expanded');

            } else {
                $(this).parent('div').addClass('expanded');
                $(this).next('div').slideDown();
            }
        });

【问题讨论】:

  • (与问题无关)您在审查第二个示例时错过了俄亥俄办事处的地址

标签: javascript jquery html css sass


【解决方案1】:

我尝试实现您的要求:

https://jsfiddle.net/pje7Lznf/

<div class="container">
            <div class="row">
                <div class="col-lg-3 col-md-3 col-sm-3"> </div>
                <div class="col-lg-9 col-md-9 col-sm-9 white">
                    <div class="row">
                        <div class="col-lg-9 col-md-9 col-sm-8 col-xs-12 rghtpd"><style>.rghtpd{padding-right: 0px !important; width:583px;}</style>
                            <div class="title">Contact us</div>
                            <div class="row">
                                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
                                                                                                                                                    <div class="contact_item expanded">
                                            <div class="head">
                                                <div class="name">California office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: block;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        One Embarcadero Center Suite 500, San Fransisco, 94111, CA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (415) 639-3001
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">Florida office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        9600 Koger Blvd. Suite 225, St. Petersburg, 33702, FL
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (727) 578-2800
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">London office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        Lloyd's Building, Gallery 4 12 Leadenhall St., London, EC3V 1LP, England
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (0207) 101-9395
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">myName office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        123 Fake st , Springfield, 12345, OH
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        555
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                </div>
                                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
                                        <div class="contact_item expanded">
                                            <div class="head">
                                                <div class="name">Ohio office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: block;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        4449 Easton Way 2nd Floor, Columbus, 43219, OH
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (614)526-8754
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item">
                                            <div class="head">
                                                <div class="name">Pennsylvania office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info" style="display: none;">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        One International Plaza Suite 550, Philadelphia, 19113, PA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (215) 279-5845
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">Texas office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        950 Echo Lane Suite 200, Houston, 77024, TX
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (832) 586-0301
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                        <div class="contact_item ">
                                            <div class="head">
                                                <div class="name">WASH office<span class="plus">+</span> <span class="minus">-</span></div>
                                            </div>
                                            <div class="info">
                                                <ul>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/marker.png"></div>
                                                        1100 Dexter Avenue North Suite 100, Seattle, 98109, WA
                                                    </li>
                                                    <li>
                                                        <div class="icon"><img alt="" src="//lig.azureedge.net/public/UK/Content/Images/phone.png"></div>
                                                        (253)271-9692
                                                    </li>
                                                </ul>
                                                <div class="clearfix"></div>
                                            </div>
                                        </div>
                                </div>
                            </div>
                        </div>

$(".contact_item .head").click(function () {

            if ($(this).parent('div').hasClass('expanded')) {
                $(this).next('div').slideUp();
                $(this).parent('div').removeClass('expanded');
                $(".info").each(function(i , obj){
                    console.log($(obj))
                  $(obj).removeClass('expanded');
                  $(obj).slideUp();
                })
            } else {
                 $(".info").each(function(i , obj){
                    console.log($(obj))
                  $(obj).removeClass('expanded');
                  $(obj).slideUp();
                })
                $(this).parent('div').addClass('expanded');
                $(this).next('div').slideDown();
            }


        });

.contact_item{
  background-color: #bdc3c7;
  color: white;
  margin-bottom: 10px
}

【讨论】:

    【解决方案2】:

    我整理了一个简单的基于 CSS 的解决方案,它允许将 jQuery 代码归结为如下内容:

     $('.contact_item').on('click', '.head', function () {
       var clicked = $(this).closest('.contact_item');
       $('.contact_item.expanded').add(clicked).toggleClass('expanded');
     });
    

    该解决方案取消了动画,但这是我处理很多此类情况的方式,并且相对而言非常干净。如果需要的话,从这里添加动画应该是一个相当简单的练习,但将此解决方案视为一个不错的选择:

    Fiddle w/ solution

    【讨论】:

      【解决方案3】:

      这些是很好的建议,但没有完全奏效,最后这就是我对我的函数所做的,现在它可以工作了:

       $(".contact_item .head").click(function () {
                  var flag = $(this).parent('div').hasClass('expanded');            
                  if ($(".contact_item .head").parent('div').hasClass('expanded')) {
                      $(".contact_item .head").next('div').slideUp();
                      $(".contact_item .head").parent('div').removeClass('expanded');                 
                      if (flag==false) {
                          $(this).parent('div').addClass('expanded');
                          $(this).next('div').slideDown();
                      }
                  }           
                  else {
                      $(this).parent('div').addClass('expanded');
                      $(this).next('div').slideDown();
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2011-03-01
        • 2014-07-20
        • 2017-02-12
        • 2021-03-22
        相关资源
        最近更新 更多