@myaurizio

Как при открытии div закрыть другие?

Как чтобы при открытии одного элемента div закрывать другие?
Вот скрипт который сейчас реализует развертывание текста:
function function_name(value)
{ 
var id_v = $(value).attr('id'); 
var id = id_v.substr(8,1); 
 //console.log(id);
if ( jQuery.browser.msie && parseInt(jQuery.browser.version) == 6) {
if ($('#opis' + id).css("display")=="block") {$('#opis'+ id).css("display", "none");
} else {$('#opis'+ id).css("display", "block");
}
} else {$('#opis' + id).toggle("slow");}
if ($('#opislink'+ id).text()=='Свернуть') {$('#opislink'+ id).text('Развернуть');
} else {$('#opislink'+ id).text('Свернуть');
}
 
}

И можно ли вместо текста "Развернуть" взять значение из тега?
  • Вопрос задан
  • 462 просмотра
Решения вопроса 1
@Firsov36
full-stack web developer
Код верстки взят из комментария к первому ответу, частично переделан.
Вот написал под Вашу задачу. Надеюсь у Вас jQuery подключен, без него не будет работать.

<script>
  function showDescription(id) {
    $(".description").each(function () {
      $(this).hide();
    });

    $("#" + id).show();
  }
</script>

<ul>
  <li>
    1. <a href="#1" onclick="showDescription('one'); return false;">Один <span>раз</span></a>
  </li>
  <li>
    2. <a href="#1" onclick="showDescription('two'); return false;">Два <span>два</span></a>
  </li>
  <li>
    3. <a href="#1" onclick="showDescription('three'); return false;">Три <span>три</span></a>
  </li>
</ul>

<div class="descriptionContainer">
    <div id="one" class="description">
      <h1>Заголовок 1</h1>
      Lorem Ipsum is simply dummy text
    </div>

    <div id="two" class="description">
      <h1>Заголовок 2</h1>
      Lorem Ipsum is simply dummy text
    </div>

    <div id="three" class="description">
      <h1>Заголовок 3</h1>
      Lorem Ipsum is simply dummy text
    </div>
</div>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Comsequent
Пишу потихоньку.
Убрать у всех дивов класс show, и добавить его только блоку который открыли(по которому кликнули).
if(document.querySelector('yourSelector').classList.contains('show'){
// Do something
} else { 
// do else
}


============================
То, что Вы хотите сделать - вариация на тему html tags.
Немного поправим Ваш код, для упрощения жизни.
html
<ul>
    <li class='tab-btn'>1.<a href="#1" id="opislink_0"> Один <span style="font-weight:bold">раз</span></a></li>
        <li class='tab-btn' >2.<a href="#2" id="opislink_1"> Два</a><span style="font-weight:bold"> два</span></li>
        <li class='tab-btn'>3.<a href="#3" id="opislink_2"> Три <span style="font-weight:bold"> три</span></a></li>
</ul>
<div id='opis0' class='opis'>
//
</div>
<div id='opis1' class='opis'>
// // //
</div>
<div id='opis2' class='opis'>
// // // // // //
</div>

CSS
<style>
.opis{display: none;}
.show{display: block;}
</style>

JS
<script>
    var buttons = document.querySelectorAll('.tab-btn');
    for( var i= 0; i<buttons.length; i++){

        var button = buttons[i];
        button.addEventListener('click', function () {
            var tabs = document.querySelectorAll('.opis');
            for( var j = 0; j<tabs.length; j++){
                var tab = tabs[j];
                tab.classList.remove('show');
            }
            var showDivId = this.querySelector('a').id.split('_')[1];
            document.querySelector('#opis' + showDivId).classList.add('show');
        });
    }
    </script>

Поправил. Работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы