Попытка скрыть все видимые разделы и показать только выбранный

#javascript #html #dom-events #toggle

#javascript #HTML #dom-события #переключить

Вопрос:

Следующий код работает для включения и выключения видимости, но я хочу иметь возможность скрывать любой видимый div и показывать только тот, который виден. Вот HTML:

 <div id="main">

    <div id="hiddena">
    </div>
    
    <div id="hiddenb">
    </div>
    
    <div id="hiddenc">
    </div>
    
    <div id="hiddend">
    </div>
    
    <div id="hiddene">
    </div>

</div>

<div id="buttona">
    <button type=submit onclick="switchVisible('hiddena');"></button>
</div>

<div id="buttonb">
    <button type=submit onclick="switchVisible('hiddenb');"></button>
</div>

<div id="buttonc">
    <button type=submit onclick="switchVisible('hiddenc');"></button>
</div>

<div id="buttond">
    <button type=submit onclick="switchVisible('hiddend');"></button>
</div>

<div id="buttone" class="tall">
    <button type=submit onclick="switchVisible('hiddene');"></button>
</div>
  

И вот сценарий…

 <script type="text/javascript">

function switchVisible(id) {
   var e = document.getElementById(id);
   if(e.style.display == 'block')
      e.style.display = 'none';
   else
      e.style.display = 'block';
}

</script>
  

Есть ли у кого-нибудь какие-либо предложения или дополнения к сценарию, которые могли бы это сделать?

Комментарии:

1. Вы должны дать им всем общее имя класса, тогда вы сможете выбрать все элементы с этим классом и скрыть их все. Затем вы просто обрабатываете тот, который вы выбрали.

Ответ №1:

было бы проблемой скрыть их все сразу, а затем отобразить только тот, который вы хотите?

 function hide_them() {
    var divsList = ["hiddena", "hiddenb", "hiddenc", "hiddend", "hiddene"]
    divsList.forEach(function (element) {
        element.style.visibility = "hidden";
    });
}
  

наконец, просто вызовите функцию hide_them в начале вашей функции:

 function switchVisible(id) {
   hide_them();
   var e = document.getElementById(id);
   e.style.display = 'block';
}
  

Другой способ — выбрать элементы по тегу и скрыть их все (это не очень хороший способ, потому что, когда ваш код растет, это может вызвать нежелательные проблемы)

Ответ №2:

Несколько предложений здесь

  1. Никогда не смешивайте свою разметку с javascript. Вы можете рассмотреть возможность привязки onclick к javascript с помощью addeventlistener или jQuery bind
  2. Идентификатор всегда должен быть уникальным. Если вы хотите иметь несколько элементов с одинаковыми именами, вы можете рассмотреть возможность использования class , потому что document.getelementsbyclassname всегда возвращает массив 3 .В вашей логике отображения / скрытия вы проверяете, является ли элемент «блоком» или «нет». Когда элемент отображается, по умолчанию element.style.display будет «» не «блокировать»

проверьте следующий фрагмент кода

 function switchVisiblebyId(id){
  var element=document.getElementById(id);
var displayStyle=element.style.display;
  if(displayStyle==="" || displayStyle==="block"){
    element.style.display="none";
  }
  else{
    element.style.display="";
  }
}  
 <div id="hiddena">
  div1
    </div>

    <div id="hiddenb">
      div2
    </div>

    <div id="hiddenc">
      div3
    </div>

    <div id="hiddend">
      div4
    </div>

    <div id="hiddene">
      div5
    </div>


<div id="buttona">button1
    <button type=submit onclick="switchVisiblebyId('hiddena');"></button>
</div>

<div id="buttonb">button2
    <button type=submit onclick="switchVisiblebyId('hiddenb');"></button>
</div>

<div id="buttonc">button3
    <button type=submit onclick="switchVisiblebyId('hiddenc');"></button>
</div>

<div id="buttond">button4
    <button type=submit onclick="switchVisiblebyId('hiddend');"></button>
</div>

<div id="buttone" class="tall">button5
    <button type=submit onclick="switchVisiblebyId('hiddene');"></button>
</div>  

Надеюсь, это поможет

Комментарии:

1. Похоже, это дает тот же результат, что и мой исходный код, где кнопки используются для включения и выключения.