【问题标题】:jQuery show and hide div by buttons classjQuery 按按钮类显示和隐藏 div
【发布时间】:2020-05-14 00:41:45
【问题描述】:

我想使用按钮和 JQuery 点击事件显示隐藏不同的 div。如何选择正确的 div 来显示或隐藏它?

$(document).ready(function(){

  $("#button-1").click(function(){
    $("#intro-1").css({"display" : "none"});
    $("#content-1").css({"display" : "inline-block"});
  });
  
  $("#button-2").click(function(){
    $("#intro-2").css({"display" : "none"});
    $("#content-2").css({"display" : "inline-block"});
  });
  
});
#content-1, #content-2{
  display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
   
   <div id="cont-1">
    <div id="intro-1">
      <p> Some text...</p>
    </div>
    <div id="content-1">
      <p>More explicative text</p>
    </div>
   </div>
   <button id="button-1" class="mybuttonclass"> Click here</button>
    
    <div id="cont-2">
    <div id="intro-2">
      <p> Some text...</p>
    </div>
    <div id="content-2">
      <p>More explicative text</p>
    </div>
   </div>
   <button id="button-2" class="mybuttonclass"> Click here</button>
   
   <!-- other <div id="cont-x" -->
  
</div>

现在,我需要使用 id="cont-x" 创建大量其他 div ...是否可以创建一个函数,您可以通过单击按钮选择正确的 div 来显示/隐藏按班级? 直到现在,我为每个按钮创建了一个函数,然后我检索了潜水以按 ID 显示/隐藏。我想对所有 div 使用一个函数,并按类名选择“this”按钮。有可能吗?

【问题讨论】:

  • 如果当前帖子都没有回答您的问题,请添加 cmets/更多信息。

标签: jquery html css


【解决方案1】:

你只需要这个 CSS 和 JS 来完成你的任务。 :)

jQuery('.mybuttonclass').on('click', function(){
  // Get the number from button ID. 
  var id = jQuery(this).attr('id').replace('button-','');
  // Toggle the visibility.
  jQuery("#intro-" + id).css({"display" : "none"});
  jQuery("#content-" + id).css({"display" : "inline-block"});
});
[id^="content-"] {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
   
   <div id="cont-1">
    <div id="intro-1">
      <p> Some text...</p>
    </div>
    <div id="content-1">
      <p>More explicative text</p>
    </div>
   </div>
   <button id="button-1" class="mybuttonclass"> Click here</button>
    
    <div id="cont-2">
    <div id="intro-2">
      <p> Some text...</p>
    </div>
    <div id="content-2" >
      <p>More explicative text</p>
    </div>
   </div>
   <button id="button-2" class="mybuttonclass"> Click here</button>
   
   <!-- other <div id="cont-x" -->
  
</div>

【讨论】:

  • 还有 jQuery.. :p
【解决方案2】:

你可以使用这样的东西。 我在您的按钮中添加了data-target="#cont-1",因此您可以标记要打开的 div。

$(document).ready(function(){
        $(".mybuttonclass").click(function() {
           $("div[id*='cont-']").hide();
           var target = $(this).data('target');
           $(target).toggle();
         });
      });
#cont-1,#cont-2{display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
       
       <div id="cont-1">
          <div id="intro-1">
            <p> Some text...</p>
          </div>
          <div id="content-1">
            <p>More explicative text</p>
          </div>
       </div>
       <button id="button-1" class="mybuttonclass" data-target="#cont-1"> Click here</button>
        
        <div id="cont-2">
          <div id="intro-2">
            <p> Some text...</p>
          </div>
          <div id="content-2">
            <p>More explicative text</p>
          </div>
       </div>
       <button id="button-2" class="mybuttonclass" data-target="#cont-2"> Click here</button>
       
       <!-- other <div id="cont-x" -->
      
    </div>

【讨论】:

  • 好的,谢谢你的代码.. 但我需要通过点击显示/隐藏。例如,我单击 button-1 和 jQuery 隐藏“一些文本...”并显示“更多解释性文本”。如果我再次单击同一个按钮,jQuery 会显示“一些文本......”并隐藏“更多解释性文本”等等......并且有很多按钮带有他们的 div 来显示/隐藏。看看其他用户 sn-p,他们解决了我的问题
  • 对不起,我误解了你的问题:(
【解决方案3】:

渲染和按钮操作等组件的 POC:

let count = 0;

function addCard() {
  const card = `<div class="intro" data-num="${count}">intro</div>
<div class="content hide" data-num="${count}">content</div>
<div class="show-btn" onClick="toggleShow(${count})">SHOW</div>`;
  document.body.innerHTML += card;
  count++;
}

function toggleShow(num) {
  document.querySelector(`.intro[data-num="${num}"]`).classList.toggle("hide");
  document.querySelector(`.content[data-num="${num}"]`).classList.toggle("hide");
}
.add,
.show-btn {
  margin-bottom: 20px;
  cursor: pointer;
}

.hide {
  display: none;
}
&lt;div class="add" onClick="addCard()"&gt;ADD&lt;/div&gt;

【讨论】:

    【解决方案4】:

    在大多数情况下,使用 nother

    很容易实现
    • id
    • 也不是 jQuery。

    见:

    document.addEventListener('click', function(event) { // delegate listener on document
      if (event.target.matches('button.showmore')) {
        event.target.parentElement.classList.toggle('show-more');
      }
    })
    .explicative-text {
      display: none;
    }
    
    .show-more .explicative-text {
      display: block;
    }
    <div class="container">
    
      <div>
        <div class="intro-text">
          <p> Some text...</p>
        </div>
        <div class="explicative-text">
          <p>More explicative text</p>
        </div>
        <button class="showmore"> Click here</button>
      </div>
    
    
      <div>
        <div class="intro-text">
          <p> Some text...</p>
        </div>
        <div class="explicative-text">
          <p>More explicative text</p>
        </div>
        <button class="showmore"> Click here</button>
      </div>
    
    </div>

    【讨论】:

    • 感谢代码...有趣的 Javascript 示例
    • 看看这种方法有多干净?
    【解决方案5】:

    如果您需要 id 来做其他事情,但对于这个使用类。只需对组使用 intro-group 类,然后在元素上使用 hidden 以最初隐藏并切换它,更简单的是,添加一个类 toggled 并使用它来定位元素以打开类 hidden

    $(function() {
      $(".mybuttonclass").on('click', function() {
        $(this).prev('.intro-group').find(".toggled").toggleClass("hidden");
      });
    });
    .intro,
    .content {
      display: inline-block;
    }
    
    .hidden {
      display: none;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="container">
    
      <div class="intro-group">
        <div class="intro toggled">
          <p> Some text...</p>
        </div>
        <div class="content toggled hidden ">
          <p>More explicative text</p>
        </div>
        <div class="toggled hidden ">
          <p>I am another element to toggle</p>
        </div>
      </div>
      <button class="mybuttonclass"> Click here</button>
      <div class="intro-group">
        <div class="intro toggled">
          <p> Some text...</p>
        </div>
        <div class="content toggled hidden">
          <p>More explicative text, I am longer</p>
        </div>
      </div>
      <button class="mybuttonclass"> Click here</button>
    
    </div>

    【讨论】:

    • 非常感谢!这就是我一直在寻找的。​​span>
    • @wrexo 我很欣赏这个注释,但是您可以通过单击任何您认为有用的问题或答案左侧的投票按钮或单击回答您的问题的接受复选标记来轻松添加赞赏问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多