본문 바로가기

개발/javascript

[JS]FAQ만들기

홈페이지에서 질문과 답변에 대한 내용을 찾아볼 수 있는 FAQ페이지를 쉽게 찾아 볼 수 있다. 

이는 사용자와의 소통에서 중요한 요소로 작용할 수 있다. 

 

<body>
      <section class="questions">
        <!-- title -->
        <div class="title">
          <h2>general questions</h2>
        </div>
        <!-- questions -->
        <div class="section-center">
          <!-- single question -->
          <article class="question">
            <!-- question title -->
            <div class="question-title">
              <p>do you accept all major credit cards?</p>
              <button type="button" class="question-btn">
                <span class="plus-icon">
                  <i class="far fa-plus-square"></i>
                </span>
                <span class="minus-icon">
                  <i class="far fa-minus-square"></i>
                </span>
              </button>
            </div>
            <!-- question text -->
            <div class="question-text">
              <p>
                Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est
                dolore illo dolores quia nemo doloribus quaerat, magni numquam
                repellat reprehenderit.
              </p>
            </div>
          </article>
          <!-- end of single question -->
          <!-- single question -->
          <article class="question">
            <!-- question title -->
            <div class="question-title">
              <p>do you suppport local farmers?</p>
              <button type="button" class="question-btn">
                <span class="plus-icon">
                  <i class="far fa-plus-square"></i>
                </span>
                <span class="minus-icon">
                  <i class="far fa-minus-square"></i>
                </span>
              </button>
            </div>
            <!-- question text -->
            <div class="question-text">
              <p>
                Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est
                dolore illo dolores quia nemo doloribus quaerat, magni numquam
                repellat reprehenderit.
              </p>
            </div>
          </article>
          <!-- end of single question -->
          <!-- single question -->
          <article class="question">
            <!-- question title -->
            <div class="question-title">
              <p>do you use organic ingredients?</p>
              <!-- button -->
              <button type="button" class="question-btn">
                <span class="plus-icon">
                  <i class="far fa-plus-square"></i>
                </span>
                <span class="minus-icon">
                  <i class="far fa-minus-square"></i>
                </span>
              </button>
            </div>
            <!-- question text -->
            <div class="question-text">
              <p>
                Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est
                dolore illo dolores quia nemo doloribus quaerat, magni numquam
                repellat reprehenderit.
              </p>
            </div>
          </article>
          <!-- end of single question -->
      </section>
    </main>
    <!-- javascript -->
    <script src="app.js"></script>
  </body>

이 <body>에 해당하는 이 부분은 실질적인 질문과 답변의 UI를 보여주는 부분이다. 

 

JS

1. 모든 질문 선택

const questions = document.querySelectorAll(".question");

- .question클래스를 가진 모든 요소를 선택한다. 

 

2. 각 질문 순회

questions.forEach(function (question) {
  const btn = question.querySelector(".question-btn");
  // console.log(btn);

  btn.addEventListener("click", function () {
    // console.log(question);

    questions.forEach(function (item) {
      if (item !== question) {
        item.classList.remove("show-text");
      }
    });

    question.classList.toggle("show-text");
  });
});

- forEach매서드는 questions노드 리스트의 각 요소를 순회한다. 

- 각 질문에 대해서 question.querySelector(".question-btn")을 사용하여 내부의 버튼을 찾는다.

 

3. 이벤트 리스너 추가

btn.addEventListener("click", function () { ... });

- 버튼에 'click' 이벤트를 추가한다. 

 

4. 다른 질문 닫기 

questions.forEach(function (item) {
  if (item !== question) {
    item.classList.remove("show-text");
  }
});

- 버튼이 클릭되면, 먼저 모든 질문을 다시 순회합니다

- 루프 내 현재 항목이 클릭된 질문이 아닌 경우, 해당 항목에서 .show-text클래스를 제거한다. 

 

5. 클릭된 질문 전환 

question.classList.toggle("show-text");

- 마지막으로 스크립트는 클릭된 질문에 .show-text클래스를 전환하여 텍스트를 보이거나 숨긴다. 

'개발 > javascript' 카테고리의 다른 글

[JS] To do List 만들기 !  (0) 2024.09.05
[JS]날씨앱을 만들어 보자  (2) 2024.09.04
[JS]modal만들기  (0) 2024.06.23
[JS] 사이드 바 만들기  (0) 2024.06.16
[JS] 반응형 네비게이션바  (0) 2024.06.09