Today’s Key 🔑

추가로 공부하자 🔥

블로그에 기록하면서 복습하자 🚀

트위틀러의 DOM을 조작하면서 원하는 방향대로 움직이도록 설계하는 작업이 정말 쉽지 않았다. Jquery를 2018년에 처음 코드잇 강좌를 들으며 다뤘었고, 그 이후로 DOM 자체를 다룬 건 이번이 처음이다. 정말 새롭게만 느껴졌다. 그래서 나를 힘들게 했던 필터링 코드에 대해서 이야기 해보고자 한다.

필터링 조건 1. 작성된 트윗이 보여지는 UI에서 유저 이름을 클릭하여 특정한 값을 가지고 와야 한다.

그래서 document.querySelector('#user-name').textContent를 아무리해도 내가 원하는 값을 가지고 오지 않았다. (콘솔에 찍어보았을 때는 잘 나왔는데…) 그래서 구글링을 시작했다.

function filter() {
   let nameTxt = this.textContent;
   let twitli = document.querySelectorAll('#twit-contents');
}


필터링 조건 2. 가지고 온 값이 다른 곳에도 일치하게 있는지 조사해야 한다.

for ~ in 구문을 활용해서 요소들의 내부 값을 비교하여 실행했다. 계속 ‘iterator ~’ 를 담은 오류가 터져나왔다. (물론 다른 이벤트 함수에 적용을 안해서 그럴 수 도 있다.) 그래서 iterable한 것을 검색했고, 무진장 많고 어려운 정보에 당황하여 for ~ of 구문만을 간신히 구출할 수 있었다.

   for (let twit of twitUl) {
      if (twit.firstElementChild.textContent !== nameTxt) {
         
         twit.style.display = 'none';
      }
   }


필터링 조건 3. 언제 어느 상황이든 잘 작동해야 한다.

그렇다. 이제 관건은 트위터가 브라우저에 불러와졌을 때, 새로운 트윗이 생길 때 마다 필터링이 잘 작동해야 한다는 것이다. 그래서 #user-name의 값이 입력되는 곳을 각각 찾아서 전부 filter 함수를 클릭 이벤트로 심어줬다. 이것을 생각하는 것에도 오랜 시간이 걸린 것 같다.

// 브라우저에 onload 됐을 때 구동되는 함수
function basicTwit(obj) {
   
   obj.forEach(function (el) {
      let twitElement = document.importNode(tmpl.content, true);

      twitElement.querySelector('#user-name').textContent = el['user'];
       twitElement.querySelector('#user-name').onclick = filter
       ...
   }
};

window.onload = basicTwit(DATA);
// 새로운 트윗이 생길때마다 호출되는 마법의 spitTwit 함수
function spitTwit(obj) {
   ...
   let twitElement = document.importNode(tmpl.content, true);

   ...
   twitElement.querySelector('#user-name').textContent = firstEl['user'];
   twitElement.querySelector('#user-name').onclick = filter

}


그랬다. 트위틀러를 정말 오랬동안 잡고 있었다. 오랜만에 다루는 DOM에 익숙도가 현저하게 떨어진 상태였고, 새로 알게 된 정보도 엄청 많았다. 앞으로 많은 과정을 헤쳐가야 하는데.. 걱정이다. 🏄‍♂️