nextSibling vs nextElementSibling

남이섬·2022년 12월 21일

현재 노드에서 다음 노드를 선택할때 nextSibling을 자주 사용한다

자바스크립트로 변수 지정하고 nextSibling을 활용하여 다음 노드 선택을 동적으로 구형하고 있었다

하지만 노드의 다음 노드를 그다음 노드를 선택하다 보면 마지막 노드가 나오는데
그 노드를 맨위로 다시 올렸더니,

저번에 inline, inline-block에서의 여백이 보여진다 ..

마지막 노드를 선택하여 다시 처음으로 올리다 보면 먼가 노드가 초기화 되어서 공백문자를 지워 줘야 한다 ..

방법은

  1. <!-- --> 주석을 달아 준다
  2. margin을 4px 만큼 빼준다
  3. display를 flex를 사용한다
  4. font-size를 0을 해준다
margin (left or right): -4px

이렇게 css를 활용하여 적용해도 되지만 동적인 노드에 일일이 적용하기엔 무리가 있었다, 심지어 다른 조건에서는 레이아웃을 못잡는 경우도 있었다

다양한 방법을 시도하던 중

console.log를 확인해보니 nextSibling로 가져온 부분이 #text로 나와서 찾아보니 nextSibling의 문제였다

nextSibling은 공백이나 줄 바꿈도 하나의 노드로 인식하기 때문에 다시 가져온 노드의 정보에 #text가 담겨있고, #text가 공백문자를 가져오는거 같다

#text 노드는 태그 사이의 마크 업 에서 공백이 발생하는 DOM에 삽입되며 ( 즉 요소의 닫기 태그와 다음 태그의 열기 태그 사이에 있습니다 )
(MDN)

css로 이리저리 씨름하다 다른 방법을 찾아보니 nextElementSibling을 찾았고

nextElementSibling

nextElementSibling은 nextSibling와 다르게 공백, 텍스트를 포함하지 않은 Element(요소)만 가져온다

즉, 공백, text등은 가져오지 않는다

nextElementSibling 적용으로 참 순조로히 마무리 할 수 있었다

먼가 나 이외에도 공간여백으로 난처하여 만들어진게 아닌가 싶다 ..

현재 이커머스 작업중에 바닐라 자바스크립트로 캐로셀을 구현해야해서,
저번에 연습하던거에서 더 추가적으로 디테일하게 만들고 있는데 공간여백 등 추가적으로 알게 되는게 많은거 같다

profile
즐겁게 살자

0개의 댓글