【问题标题】:Collapse other Div on click单击时折叠其他 Div
【发布时间】:2020-09-23 04:15:53
【问题描述】:

.notshow 类默认是隐藏的,我希望 .notshow 类的 div 在单击 .shownow 类中的 Show It 文本后可见。 我创建了一个 jquery 代码,但它不工作。 当我单击 .shownow div 时,所有具有 .notshow 类的隐藏 div 都可见。 我只希望一个带有 .notshow 类的 div 可见。

示例:我想显示具有 .notshow 类的单个 div 可见,如果我单击另一个 div,则应该隐藏前一个 div。 它类似于手风琴。

*我在互联网上搜索了很多,但找不到任何类似的解决方案。 感谢您的帮助

JsFiddle:https://jsfiddle.net/yoxo5kfh/3/

<div class="data">

<div class="main">
<div class="title">
<div class="shownow"><h4>Show It</h4></div>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>

<div class="main">
<div class="title">
<div class="shownow"><h4>Show It</h4></div>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>


<div class="main">
<div class="title">
<div class="shownow"><h4>Show It</h4></div>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>

</div>

【问题讨论】:

  • 请在 js fiddle 中更新你的脚本。
  • 你想改变你的html
  • 已更新。我只创建了 jquery 来显示它。
  • @swapnilnax 如果类似的话。
  • @Kim 检查我给出的答案,如果还有什么问题,我也有一些建议给你。

标签: javascript jquery html css


【解决方案1】:

为此,我们必须针对您要show的那个,我们可以通过组合来定位它..

  1. $(this) - 您点击的元素。
  2. .closest - 两个元素的父级。
  3. 如果你想要一些动画使用.slideDown insted of .show().slideUp insted of .hide()

$('body').on('click', '.shownow', function() {
  $('.notshow').removeClass('nohide');
  $(this).closest('.main').find('.notshow').addClass('nohide').toggle();
  $('.notshow').each(function() {
    if(!$(this).hasClass('nohide')){
       $(this).hide();
    }
  });

});
.notshow {
  display: none;
}

.catlist {
  list-style: none;
}

.show {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="data">

  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>

  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>


  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>

</div>

【讨论】:

  • 谢谢,但是如果我想在点击 Show it 时隐藏最后打开的 div 怎么办。
  • 当我单击第一个 Show It 时,它会正确显示 .notshow div。但是当我再次单击 1 Show It 时,.notshow div 仍然可见。我希望 div 为 .notshow div再次点击时隐藏。感谢您的帮助
  • 它的工作,但现在的问题是它没有隐藏其他可见的 div。
  • @Kim 所以你想隐藏其他 div 以及切换当前 div。??请问q现在自己的明确点。
  • @Kim 我已经为你更新了代码,如果它可以正常工作,它会为你工作,不要忘记标记为已解决。
【解决方案2】:

试试下面的代码。它将从所有notshow 中删除该类,并显示最接近单击元素的notshow

Updated fiddle here.

$('.shownow').click(function() {
   $(".notshow").removeClass("show")
   $(this).parent().next(".notshow").addClass("show");
})

【讨论】:

  • 谢谢,但是如果我想在点击 Show it 时隐藏最后打开的 div 怎么办。
  • 当我单击第一个 Show It 时,它会正确显示 .notshow div。但是当我再次单击 1 Show It 时,.notshow div 仍然可见。我希望 div 为 .notshow div再次点击时隐藏。感谢您的帮助
【解决方案3】:

使用 JQuery 的简单显示/隐藏。试试下面的代码,当你点击'Show It'时,它会在当前父容器中找到'.notshow'并相应地隐藏其他容器:

$('.shownow').click(function() {
  $(this).parents(".main:first").find(".notshow").toggle();
});
.notshow {
  display: none;
}

.catlist {
  list-style: none;
}

.shownow h4 {
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="data">

  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>

  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>


  <div class="main">
    <div class="title">
      <div class="shownow">
        <h4>Show It</h4>
      </div>
    </div>
    <div class="notshow">
      <ul class="catlist">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
      </ul>
    </div>
  </div>

</div>

【讨论】:

  • 当我单击第一个 Show It 时,它会正确显示 .notshow div。但是当我再次单击 1 Show It 时,.notshow div 仍然可见。我希望 div 为 .notshow div再次点击时隐藏。感谢您的帮助
【解决方案4】:

终于有somethig可以为你服务了

<div class="data">

<div class="main">
<div class="title">
<div class="shownow"><h4>Show It</h4></div>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>

<div class="main">
<div class="title">
<p class="shownow"><h4>Show It</h4><p>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>


<div class="main">
<div class="title">
<div class="shownow"><h4>Show It</h4></div>
</div>
<div class="notshow">
<ul class="catlist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>

</div>
<p>Hello</p>
<p class="selected">Hello Again</p>
<div><span>And Again</span></div>
<script>
var elms = $( "div.notshow" )
$(document).on("click", ".title", function(event){
    event.preventDefault();
    $('.notshow').removeClass('show');

    $(this).closest('div').next('.notshow').addClass('show');
}); 

</script>

【讨论】:

  • 答案是否具有相同的效果,但是当我单击 Show It 时,它会显示 .notshow 类,但是当我再次单击我已经打开的相同 Show It div 时,它不会关闭。一切都很好,但当我再次单击相同的 Show It div 时,它也应该关闭。谢谢。
【解决方案5】:

let x = document.querySelectorAll('.main');
let list = document.querySelectorAll('.notshow')

let length = x.length;


for (let i = 0; i < length; i++) {
    x[i].onclick = () => {

        if (list[i].classList.contains('show')) {
            list[i].classList.toggle('show');
        } else {
            for (let x = 0; x < length; x++) {
                list[x].classList.remove('show');
            }
            list[i].classList.toggle('show');  // toggle/add
        }
    }
}



//let x = document.querySelectorAll('.main');
//let list = document.querySelectorAll('.notshow')

//let length = x.length;

//for (let i = 0; i < length; i++) {
//    x[i].onclick = () => {
//        list[i].classList.toggle('show');  // toggle/add
//    }
//}
.notshow{
   display:none;  
}
.catlist{
   list-style:none; 
}
 .show{
  display:block;
}
<div class="data">

        <div class="main">
            <div class="title">
                <div class="shownow">
                    <h4>Show It</h4>
                </div>
            </div>
            <div class="notshow">
                <ul class="catlist">
                    <li>Item 1</li>
                    <li>Item 2</li>
                    <li>Item 3</li>
                    <li>Item 4</li>
                </ul>
            </div>
        </div>

        <div class="main">
            <div class="title">
                <div class="shownow">
                    <h4>Show It</h4>
                </div>
            </div>
            <div class="notshow">
                <ul class="catlist">
                    <li>Item 1</li>
                    <li>Item 2</li>
                    <li>Item 3</li>
                    <li>Item 4</li>
                </ul>
            </div>
        </div>


        <div class="main">
            <div class="title">
                <div class="shownow">
                    <h4>Show It</h4>
                </div>
            </div>
            <div class="notshow">
                <ul class="catlist">
                    <li>Item 1</li>
                    <li>Item 2</li>
                    <li>Item 3</li>
                    <li>Item 4</li>
                </ul>
            </div>
        </div>

    </div>

【讨论】:

  • 当我再次点击相同的 Show It div 时,我已经打开了它并没有关闭。
【解决方案6】:

我已经更新了我的答案,这将对您有所帮助,只需将其添加到您的代码中即可。

<style type="text/css">
.notshow{
    display: none;
}
</style>

<script type="text/javascript">

$(document).on('click','.shownow', function(){
    var this_display = $ 
(this).parent().next('.notshow').css('display');
    $('.notshow').css('display','none');
    if(this_display=="block"){
        $(this).parent().next('.notshow').css('display','none');
    }else{
        $(this).parent().next('.notshow').css('display','block');
    }
});
</script>

【讨论】:

  • 当我单击第一个 Show It 时,它会正确显示 .notshow div。但是当我再次单击 1 Show It 时,.notshow div 仍然可见。我希望 div 为 .notshow div再次点击时隐藏。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2019-04-22
  • 2013-03-30
  • 2022-01-09
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多