[JS]아랍어 단어장 페이지 구현하기 - 4. 검색 기능 고도화(1)

CHO WanGi·2023년 5월 16일

Javascript

목록 보기
7/20

아랍어 단어장 페이지- Al Klimat

Goal

1.검색 기능 고도화

  • 예를 들어 뜻이 내일 처럼 딱 한단어면 검색이 가능한데, 방향,방면 을 찾기 위해 방향 만 검색시 단어가 나오지 않는 현상이 발생한다
    검색 전에 전체 단어를 보여주고, 검색시 딱 그단어만 나오도록 수정이 필요하다

2.KR/AR 버튼을 만들어서 한글 검색과 아랍어 검색 둘다 지원하는 것이 필요하다

3.검색 기록을 보여주는 기능 도입

1.검색 기능 고도화

구현하고자 하는 것은 단어 한글 뜻의 일부만 일치해도 보여주는 것이다.

참고링크

💡indexOf() 메소드 사용

// 🚨 기존
 inputEl.addEventListener("change",()=> {
      DATA
        .filter(data => data.mean === inputEl.value)
        .map(function(element){
          resultEl.innerHTML = /* html */`
          ${element.single} : ${element.mean}
          `
        })

// 💡 변경 후
 inputEl.addEventListener('input', () => {
      DATA.map(item => {
        if(item.mean.indexOf(inputEl.value) !== -1){
            resultEl.innerHTML = `
            ${item.single} - ${item.plural} : ${item.mean}
            `
        }
      })
    })

기존 코드는 input.value와 한글뜻(data.mean)이 토씨하나 안틀리고 정확하게 일치해야 결과를 표출했기 때문에, 방향,방면 같은 경우 방향만 검색시
표출되지 않았다.

indexOf()를 이용한 코드는 data.mean 중, input.value에 들어오는 문자를 포함하는 요소의 인덱스를 반환하는 메소드 이다.
따라서 방향,방면방향만 검색해도 방향,방면에 해당하는 단어와 뜻을 사용자에게 보여줄 수 있다.

(그리고 indexOf() 는 대/소문자 구분을 하지만 한글과 아랍어에는 대소문자가 없다... ^^)

2.한-아 / 아-한 검색 지원

// 언어선택 버튼 - KR을 기본값으로 두고, class 에 "AR"이 추가되면 버튼의 내용이 AR 로 바뀌도록함
    langSelectBtnEl.addEventListener('click', () => {
      if (langSelectBtnEl.classList)
      // toggle 을 사용하여 자유로운 전환이 가능하도록 함
        langSelectBtnEl.classList.toggle('AR')
      langSelectBtnEl.innerHTML = (langSelectBtnEl.classList == "AR") ? `AR` : `KR`
    })

    inputEl.addEventListener('input', () => {
      DATA.map(item => {
        // 만약 class에 "AR"이 활성화된 상태라면
        if (langSelectBtnEl.classList == "AR") {
          // 이때는 input value 와 일치하는 아랍어 단어를 찾도록 함
          // 단수와 복수, 현재와 미완료형과 일치하는 모든 단어를 찾을 수 있도록 OR 연산자를 사용함
          if (item.single.indexOf(inputEl.value) !== -1 || item.plural.indexOf(inputEl.value) !== -1) {
            resultEl.innerHTML = `
            ${item.single} - ${item.plural} : ${item.mean}
            `}
        }
        // AR 이 없는 경우 = KR
        if (item.mean.indexOf(inputEl.value) !== -1) {
          resultEl.innerHTML = `
            ${item.single} - ${item.plural} : ${item.mean}
            `
        }
      })
    })

코드 흐름을 간단하게 설명하자면
1. 언어선택 버튼의 class에 ARtoggle 한다

  • 버튼은 KR이 기본값.
  • AR 이 있다면 버튼안 글자를 AR로 변경한다

2.만약 toggle되어 class에 "AR"이 있다면 input.valuedata.single || data.plural 을 비교한다
3. 만약 "AR" 이 없다면 한글 검색 모드로 input.valuedata.mean을 비교한다

한-아 검색(KR)

아-한 검색(AR)

단수,완료(data.single) 검색시

복수,미완료(data.plural) 검색시

그리고 한글 검색과 마찬가지로, 아랍어 철자 일부만 일치하여도 결과가 표출되도록 하였다.

구현 결과

아랍어 단어장 페이지- Al Klimat

(💡 아 참고로 Al Klimat 의 뜻은 아랍어로 "단어" 라는 뜻입니다)

남은 목표

검색 기능 고도화
1. 검색 전에 여러 단어를 보여주고, 검색시 해당하는 단어만 보여주기
2. 딱 하나의 단어만 보여주는 것이 아닌 여러개의 단어를 보여주기
(Ex. 을 검색시 방향,방면,방문하다,방송 등 여러 단어를 보여주기)

단어 출력 관련

  1. 단어옆에 체크박스를 만들고 이를 클릭하면 뒤집히면서 한글뜻만 보이도록 하여 암기하는데 도움이 되는 기능 도입

  2. 단어 자체를 클릭하면 toggle 을 이용하여 예문과 예문의 뜻을 보여주는 기능 도입

Header

  1. 현재 페이지가 어떤 페이지 인지를 h1 태그로 보여주지 말고, header의 요소를 이용하여 보여주는 것이 필요
profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글