[코딩 자율학습: HTML + CSS + 자바스크립트] 12~13장

재규어·2024년 4월 6일

프론트엔드 공부

목록 보기
15/15
post-thumbnail

12장. 문서 객체 모델과 이벤트 다루기

12.1 문서 객체 모델(DOM) 이해하기

  1. 문서 객체 모델(DOM, Document Object Model)은 웹 브라우저에 표시되는 문서를 자바스크립트가 이해할 수 있도록 객체화한 모델 구조이다.
  2. DOM은 트리 구조로 생성되는데, 이를 DOM 트리라고 한다.
  3. DOM 트리를 구성하는 노드의 타입은 다음과 같다.
타입설명
문서 노드(Node.DOCUMENT_NODE)최상위 document 객체의 노드 타입
요소 노드(Node.ELEMENT_NODE)h1, p 태그와 같은 요소의 노드 타입
속성 노드(Node.ATTRIBUTE_NODE)href, src와 같은 속성의 노드 타입
텍스트 노드(Node.TEXT_NODE)텍스트에 해당하는 노드 타입
주석 노드(Node.COMMENT_NODE)주석에 해당하는 노드 타입
  1. DOM 트리의 노드를 탐색하는 속성은 다음과 같다.
구분속성설명
모든 노드 탐색parenNode부모 노드를 반환한다.
childNodes모든 자식 노드를 반환한다.
firstChild첫 번째 자식 노드를 반환한다.
previousSibling이전 형제 노드를 반환한다.
nextSibling다음 형제 노드를 반환한다.
요소 노드 탐색parentElement부모 요소 노드를 반환한다.
children자식 요소 노드를 반환한다.
firstElementChild첫 번째 자식 요소 노드를 반환한다.
lastElementChild마지막 자식 요소 노드를 반환한다.
previousElementSibling이전 요소 노드를 반환한다.
nextElementSibling다음 요소 노드를 반환한다.

12.2 노드 선택하기

DOM 트리의 노드를 선택하는 다양한 메서드가 있다.

메서드 형식설명
getElementById(<id 속성값>)id 속성값과 일치하는 요소 노드를 1개만 선택한다.
getElementsByClassName(<class 속성값>)class 속성값과 일치하는 요소 노드를 모두 선택한다.
getElementsByTagName(<태그명>)태그명과 일치하는 요소 노드를 모두 선택한다.
querySelector(<CSS 선택자>)매개변수로 넘어오는 CSS 선택자에 해당하는 노드를 1개만 선택한다.
querySelectorAll(<CSS 선택자>)매개변수로 넘어오는 CSS 선택자에 해당하는 노드를 모두 선택한다.

12.3 노드 조작하기

  1. 콘텐츠 조작하기: 요소 노드는 다음 속성으로 콘텐츠를 조작할 수 있다.
속성설명
textContent노드 요소의 모든 텍스트에 접근한다.
innerText노드 요소의 텍스트 중 웹 브라우저에 표시되는 텍스트에만 접근한다.
innerHTML노드 요소의 텍스트 중 HTML 태그를 포함한 텍스트에만 접근한다.
  1. 스타일 조작하기: 요소 노드는 style 속성으로 스타일(CSS)을 지정할 수 있다.
<노드>.style.<CSS 속성명> = <속성값>;
  1. 클래스 조작하기: classList 속성의 add(), remove() 메서드로 class 속성을 조작할 수 있다.
<노드>.classList.add(class 속성값);
<노드>.classList.remove(class 속성값);
  1. 데이터 속성 조작하기: dataset 속성으로 HTML 문서에서 data-* 속성을 조작할 수 있다.
<노드>.dataset;
  1. 메서드로 속성 조작하기: 메서드로 모든 속성을 조작할 수 있다.
메서드 형식설명
<노드>.getAttribute("속성명");속성값을 가져온다.
<노드>.setAttribute("속성명", "속성값");속성값을 설정한다.
<노드>.remoteAttribute("속성명");속성을 삭제한다.

12.4 노드 추가/삭제하기

구분메서드설명
노드 생성createElement()요소 노드를 생성한다.
createTextNode()텍스트 노드를 생성한다.
createAttribute()속성 노드를 생성한다.
노드 연결<기준 노드>.appendChild(<자식 노드>)기준 노드에 자식 노드를 연결한다.
<기준 노드>.setAttributeNode(<속성 노드>)기준 노드에 속성 노드를 연결한다.
노드 삭제<부모 노드>.removeChild(<자식 노드>)부모 노드에 연결된 자식 노드를 삭제한다.

12.5 폼 조작하기

1) form 태그 선택하기

  1. document 객체의 forms 속성을 사용하면 모든 form 태그를 참조하는 HTMLCollection 객체가 반환된다. 반환된 HTMLCollection 객체를 사용해 화면에 있는 form 요소 노드를 선택할 수 있다.
  2. form 태그의 name 속성값으로 form 요소 노드를 선택할 수 있다.

2) 폼 요소 선택하기

  1. form 요소 노드의 elements 속성은 하위 노드의 폼 요소를 반환한다. 반환된 객체를 사용해 개별 폼 요소 노드에 인덱스로 접근할 수 있다.
  2. 폼 요소의 name 속성값으로 폼 요소 노드에 바로 접근할 수 있다.

3) 폼 요소의 입력값 다루기

  1. 한 줄 입력 요소, 여러 줄 입력 요소는 value 속성을 참조하면 입력한 값을 가져올 수 있고, value 속성에 값을 할당하면 새로운 값을 설정할 수 있다.
  2. 체크박스 요소와 라디오버튼 요소는 checked 속성으로 체크 또는 선택 상태를 확인할 수 있고, checked 속성에 true를 할당하면 체크 또는 선택 상태를 기본으로 설정할 수 있다.
  3. 콤보박스 요소는 selected 속성으로 항목의 선택 상태를 확인할 수 있고, selected 속성에 true를 할당하면 항목을 선택 상태로 설정할 수 있다.
  4. 파일 업로드 요소는 FileList 객체를 사용해 요소의 값을 가져올 수 있다.

12.6 이벤트 다루기

  1. 이벤트(event)는 웹 브라우저와 사용자 사이에 상호작용이 발생하는 특정 시점을 의미한다. 자바스크립트로 이벤트 종류에 따른 제어 작업을 할 수 있다.
  2. 주요 이벤트는 다음과 같다.
구분이벤트설명
마우스 이벤트onclick마우스로 클릭하면 발생한다.
ondblclick마우스로 두 번 빠르게 클릭하면 발생한다.
onmouseover마우스 포인터를 올리면 발생한다.
onmouseout마우스 포인터가 빠져나가면 발생한다.
onmousemove마우스 포인터가 움직이면 발생한다.
onwheel마우스 휠(wheel)을 움직이면 발생한다.
키보드 이벤트onkeypress키보드 버튼을 누르고 있는 동안 발생한다.
onkeydown키보드 버튼을 누른 순간 발생한다.
onkeyup키보드 버튼을 눌렀다가 뗀 순간 발생한다.
포커스 이벤트onfocus요소에 포커스가 되면 발생한다.
onblur요소가 포커스를 잃으면 발생한다.
폼 이벤트onsubmit폼이 전송될 때 발생한다.
리소스 이벤트onload웹 브라우저의 리소스 로드가 끝나면 발생한다.

12.7 이벤트 객체와 this

  1. 이벤트 객체는 이벤트 함수가 호출될 때 내부적으로 전달되는 이벤트 정보다 담긴 객체를 의미한다.
  2. 이벤트 객체의 preventDefault() 메서드를 사용하면 태그에 적용된 기본 이벤트를 취소할 수 있다.
  3. 이벤트 함수 내부에서 this 키워드를 참조하면 이벤트를 발생시킨 요소 노드를 가리킨다. 단, 화살표 함수일 때는 이벤트 객체의 target 속성으로 참조해야 한다.
profile
코딩이라는 정글에서 살아남기

0개의 댓글