@Dimon3x

Как лучше сделать открытие и закрытие элеметов?

Сделал код, полностью работает, можно ли как то его улучшить?

Говнокод или пойдёт?

Если убрать closeAnswer то остальные открытые элементы не будут сами закрываться, а будет закрываться только тот элемент, на который кликну.

Можно потыкать https://plnkr.co/edit/Tkp3xcf8T0nKYh8ykgvC?p

<!DOCTYPE html>
<html>
 
  <head>
    <style>
.answer-index {
    display: none;
}
</style>
    <script src="script.js"></script>
  </head>
 
  <body>
 
 
<div class="box-question">
    <div class="question">
        <div class="additionally">
            <a href="#">Показать ответ 1</a>
        </div>
    </div>
 
    <div class="answer answer-index">
          Этот текст открывается и закрывается
    </div>
</div>
 
<div class="box-question">
    <div class="question">
        <div class="additionally">
            <a href="#">Показать ответ 2</a>
        </div>
    </div>
 
    <div class="answer answer-index">
          Этот текст открывается и закрывается
    </div>
</div>
 
<div class="box-question">
    <div class="question">
        <div class="additionally">
            <a href="#">Показать ответ 3</a>
        </div>
    </div>
 
    <div class="answer answer-index">
          Этот текст открывается и закрывается
    </div>
</div>
 
 
  </body>
 
</html>

<code lang="javascript">
function closeAnswer() {
        var allAnswers = document.querySelectorAll('.answer');
 
        allAnswers.forEach(function (answer, i) {
            answer.classList.add('answer-index');
        })
    }
 
 
    document.documentElement.addEventListener('click', function (event) {
 
        var target = event.target;
 
 
        if (target.classList.contains("button-answer")) {
            var question = target.closest('.box-question');
            var answer = question.querySelector('.answer');
 
            if (answer.classList.contains('answer-index')) {
                closeAnswer()
                answer.classList.toggle('answer-index');
            } else {
                answer.classList.toggle('answer-index');
            }
        }
 
 
 
    });

</code>
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Floatname
Если просто необходимо получить конечную реализацию, то можно прикрутить бутстраповский компонент аккордеона. Ну это если только не стоит задача написать на чистом js самостоятельно :)

https://getbootstrap.com/docs/4.3/components/colla...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы