구문
closest(selector) (selector 는 css선택자 문자열)
반환값
selectors에 일치하는 가장 가까운 조상 Element 또는 자기 자신, 일치하는 요소가 없으면 null.
사용
- 특정 클래스를 가진 부모 요소를 찾고 싶을 때
- 이벤트 위임(Delegating Events)을 해야할 때
//수정 , 삭제 버튼 ,체크박스 눌렀을 때
containerEl.addEventListener('click', async e => {
const todoEl = e.target.closest('li');
const todoElText = todoEl.querySelector('.list--text');
const todoId = e.target.closest('li').id;
if (e.target.classList.contains('icon--edit')) {
await editTodo(todoEl.id, todoElText.textContent, todoEl.dataset.done);
alert('수정되었습니다!');
return;
} else if (e.target.classList.contains('icon--delete')) {
await deleteTodo(todoId);
await renderTodos();
return;
} else if (e.target.classList.contains('icon--checkbox')) {
if (e.target.innerHTML === 'check_box') {
e.target.innerHTML = 'check_box_outline_blank';
e.target.closest('li').dataset.done = false;
await editTodo(todoEl.id, todoElText.textContent, todoEl.dataset.done);
} else {
e.target.innerHTML = 'check_box';
e.target.closest('li').dataset.done = true;
await editTodo(todoEl.id, todoElText.textContent, todoEl.dataset.done);
}
}
});
- 트리순회 해야할 때 (Tree traversal)
// html
<div class="grandparent">
<div class="parent">
<div class="child"></div>
</div>
</div>
//javascript
const child = document.querySelector('.child');
const grandparent = child.closest('.grandparent');
참조
https://developer.mozilla.org/ko/docs/Web/API/Element/closest
ChatGPT
'FrontEnd > JavaScript' 카테고리의 다른 글
[ JavaScript ] this (0) | 2023.10.29 |
---|---|
[ JavaScript ] forEach는 비동기 함수(async)를 기다려주지 않는다. ( feat. Array.prototype) (0) | 2023.10.29 |
[ JavaScript ] 이벤트 위임 Event Delegation (1) | 2023.10.29 |
[ JavaScript ] Set이 왜 더 빠를까?(feat. 해시테이블, 시간복잡도) (1) | 2023.10.29 |
[ JavaScript ] 자바스크립트에서 private 변수 만들기 (feat. 클래스) (0) | 2023.10.27 |