Index
Index9. DOM (Document Object Model)9.1 DOM 이란?9.2 DOM 트리에 접근하기9.3 DOM 제어 명령어9.4 이벤트 객체9.5 이벤트 흐름9.6 이벤트 target, currentTarget9.7 이벤트 위임9.8 이벤트의 this9.9 실습

9. DOM (Document Object Model)
9.1 DOM 이란?
DOM 은 HTML 문서의 내용을 트리형태로 구조화하여 웹페이지와 프로그래밍 언어를 연결시켜주는 역할을 합니다. 이때 각각의 요소와 속성, 콘텐츠를 표현하는 단위를 '노드(node)'라고 합니다.

9.2 DOM 트리에 접근하기
document 객체를 통해 HTML 문서에 접근이 가능합니다. document는 브라우저가 불러온 웹페이지를 나타내며, DOM 트리의 진입점 역할을 수행합니다.
9.3 DOM 제어 명령어
- 이벤트 삽입
target.addEventListener( type, listener )의 문법 형태를 지닙니다.- 클래스 제어
DOM api를 통해 요소의 class 속성을 제어할 수 있습니다.
- 요소 제어
DOM api를 이용하면 요소를 새롭게 생성하고, 위치하고, 제거할 수 있습니다.
- JavaScript 문자열을 사용해 element, text 노드를 생성하거나 추가하기
DOM api를 이용하면 요소 안의 값에 접근하여 값을 가져오거나, 변경할 수 있습니다.
** innerHTML 사용시 주의 사항 : https://developer.mozilla.org/ko/docs/Web/API/Element/innerHTML#security_considerations
** innerText 와 textContent의 차이 : https://developer.mozilla.org/ko/docs/Web/API/HTMLElement/innerText#예제
더 정밀하게 배치하기
- DOM 안에서 노드 탐색하기
9.4 이벤트 객체
이벤트에서 호출되는 핸들러에는 이벤트와 관련된 모든 정보를 가지고 있는 매개변수가 전송됩니다. 이것이 바로 이벤트 객체입니다!
9.5 이벤트 흐름
브라우저 화면에서 이벤트가 발생하면 브라우저는 가장 먼저 이벤트 대상을 찾기 시작합니다.

이벤트 대상을 찾아갈 때 가장 상위의 window 객체부터 document, body 순으로 DOM 트리를 따라 내려갑니다. 이를 캡처링 단계라고 합니다. 이때 이벤트 대상을 찾아가는 과정에서 브라우저는 중간에 만나는 모든 캡처링 이벤트 리스너를 실행시킵니다. 그리고 이벤트 대상을 찾고 캡처링이 끝나면 다시 DOM 트리를 따라 올라가며 만나는 모든 버블링 이벤트 리스너를 실행합니다. 이를 이벤트 버블링 단계라고 합니다. 그리고 이러한 과정에서 이벤트 리스너가 차례로 실행되는것을 이벤트 전파(event propagation)라고 합니다.
9.6 이벤트 target, currentTarget
이러한 이벤트의 특징 덕분에 이벤트 객체에는 target, currentTarget 이라는 속성이 존재합니다. target 속성에는 이벤트가 발생한 진원지의 정보가 담겨 있습니다. target 속성을 통해 이벤트 리스너가 없는 요소의 이벤트가 발생했을 때도 해당 요소에 접근 할 수 있습니다.
currentTarget 속성에는 이벤트 리스너가 연결된 요소가 참조되어 있습니다.
9.7 이벤트 위임
앞에서 우리는 이벤트의 흐름을 통해 이벤트 리스너가 없는 요소의 이벤트가 발생했을 때도 해당 요소에 접근 할 수 있다는 것을 알게 되었습니다. 이를 이용해 이벤트 리스너가 없어도 마치 리스너가 있는 것 처럼 사용 할 수 있습니다.
이러한 테크닉을 이벤트 위임이라고 합니다.
9.8 이벤트의 this
이벤트 리스너 함수 내부에서의 this 값은 이벤트가 연결된 노드를 참조합니다.
이는 event.currentTarget 속성의 참조값과 유사합니다.
만약 이벤트 리스너 함수를 화살표 함수로 쓴다면 this 가 가리키는 대상이 달라진다는 점에 유의하세요.