jQuery показать и скрыть div с помощью кнопок класса - PullRequest
1 голос
/ 28 января 2020

Я хочу показать скрыть другой div, используя кнопки и JQuery событие клика. Как я могу выбрать правильный 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>

Теперь мне нужно создать очень большое число других div с id = "cont-x" ... возможно ли создать одна функция, которую вы можете выбрать правильный div, чтобы показать / скрыть, нажав на кнопку по классу? До сих пор я создаю функцию для каждой кнопки и извлекаю погружение, чтобы показать / скрыть по идентификатору. Я хотел бы использовать одну функцию для всех div и выбрать кнопку «это» по имени класса. Возможно ли это?

Ответы [ 5 ]

1 голос
/ 28 января 2020

Вам нужны только эти 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>
0 голосов
/ 28 января 2020

ЕСЛИ вам нужен идентификатор для чего-то другого, но для этого используйте классы. Просто используйте класс 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>
0 голосов
/ 28 января 2020

Как и в большинстве случаев, этого очень легко достичь, используя ни

  • 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>
0 голосов
/ 28 января 2020

PO C для компонента, такого как рендеринг и действие кнопки:

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;
}
<div class="add" onClick="addCard()">ADD</div>
0 голосов
/ 28 января 2020

Вы можете использовать что-то вроде этого. Я добавил 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...