vanilla JS로 siblings 구현하기
2023. 2. 13. 00:15ㆍStudy/JavaScript
jQuery의 메소드 중 하나인 siblings()는 선택한 자신 요소를 제외한 형제 요소들을 모두 고르는 메소드다.
이를 바닐라 자바스크립트로 구현하려면 filter() 를 사용해 비교적 간단하게 구현할 수 있다.
예제코드
HTML
<ul>
<li class="one">one</li>
<li class="two">two</li>
<li class="three">three</li>
</ul>
jQuery
$(".one").siblings();
JavaScript
const siblings = (el) => [...el.parentElement.children].filter(node => node != el);
const one = document.querySelector('.one');
console.log(siblings(one));
// 함수에 엘리먼트를 넣으면 그 엘리먼트의 형제 요소들을 배열로 반환한다.
// > (2) [li.two, li.three]
원리
- 먼저 인자로 받은 엘리먼트의 부모 엘리먼트 (parentElement)를 구하고 자식(children)들을 배열로 반환한다.
- 다만 이 때의 배열은 진짜 배열이 아닌 유사배열이라 filter() 고차함수를 사용하기 위해 진짜 배열로 변환해준다.
Array.from()을 이용하거나 spread 문법으로 변환해준다. - 그리고 filter 고차함수로 배열을 하나씩 순회하면서 인자로 받은 엘리먼트가 아닌 것들만 배열로 만들어 반환한다.
- 즉, 형제 엘리먼트로 이루어진 배열을 반환하게 된다.
응용:)
const AllList = Array.from(document.querySelectorAll(".list_item"));
AllList.forEach((item, idx)=>{
const siblings = AllList.filter(node => node != item);
})
참고:)
'Study > JavaScript' 카테고리의 다른 글
웹, 앱 체크 navigator.userAgent (0) | 2023.04.06 |
---|---|
ios mobile fix item + keypad 이슈 (0) | 2023.04.06 |
input 글자수 입력 후 다음 칸에 focus (0) | 2022.12.23 |
모바일 디바이스 체크 (0) | 2022.12.12 |
async await promise (0) | 2022.09.30 |