Search
Duplicate
😀

03. HTML과 DOM

태그

DOM(Document Object Model) 개요

DOM(document object model)은 HTML과 XML 문서의 구조를 정의하는 API 제공
DOM은 HTML 문서의 내용을 조작할 수 있는 API로 HTML을 계층구조 형식의 객체로 표현
DOM으로 HTML 문서의 검색과 조작(추가, 수정, 삭제)을 할 수 있다.
HTML 계층 구조의 제일 위에는 document 노드가 있다.
그 아래로 HTML 태그나 요소(element)들을 표현하는 노드와 문자열을 표현하는 노드가 있다.

문서 객체 만들기

createElement(tagName)
element node를 생성 (태그 생성)
reateTextNode(text)
text node를 생성
appendChild(node)
객체에 node를 child로 추가
setAttribute(name, value)
객체의 속성을 지정
setAttribute를 쓰지 않고도 객체의 속성을 direct로 지정할 수 있다. (ex) profile.width = 150; 이런 방법은 간단하지만, 웹 표준이나 브라우저가 지원하는 태그의 속성만 사용할 수 있다.
getAttribute(name)
객체의 속성값을 가져옴
innerHTML
문자열을 HTML 태그로 삽입
inerText
문자열을 text node로 삽입

문서 객체 가져오기 (jQuery의 Selector)

객체 가져오기
getElementById(id)
태그의 id 속성이 id와 일치하는 element 객체 얻기
getElementsByClassName(classname)
태그의 class 속성이 class name과 일치하는 element 배열 얻기
getgElementsByTagName(tagname)
태그이름이 tagname과 일치하는 element 배열 얻기
getElementsByName(name)
태그의 name 속성이 name과 일치하는 element 배열 얻기
querySelector(selector)
selector에 일치하는 첫번째 element 객체 얻기
id를 사용하는 경우에 주로 사용
querySelectorAll(selector)
selector에 일치하는 모든 element 배열 얻기
id를 제외한 class, tag 등을 활용할 때 주로 사용

문서 객체 제거

removeChild(childnode)
객체의 자식 노드를 제거

Event

웹페이지에서 여러 종류의 상호작용이 있을 때마다 이벤트가 발생
사용자가 마우스를 클릭하였을 때, 키보드를 눌렀을 때 등과 같이 다양한 종류의 이벤트가 존재
JavaScript를 사용하여 DOM에서 발생한 이벤트를 감지하여 이벤트에 대응하는 여러 작업 수행
이벤트는 일반적으로 함수와 연결이 되고, 이 함수는 이벤트가 발생하기 전에는 실행되지 않다가 이벤트가 발생할 경우 실행 >> 이벤트 핸들러(Handler) 또는 이벤트 리스너(Listner)라 하며 이 함수에 이벤트 발생시 실행해야 하는 코드 작성

Event - 마우스 이벤트

웹 초기에는 load, click등 소수의 이벤트만 사용
마우스 이벤트는 웹 어플리케이션에서 가장 많이 사용하는 이벤트
마우스 이벤트 핸들러에 전달되는 이벤트 객체에는 마우스 위치와 버튼 상태 등의 정보를 담고 있다.

Event - 키보드 이벤트

키보드 이벤트 순서 : down → press → up
down : 누르기 시작하는 시점
press : 누르고 떼기 직전
up : 뗀 시점

Event - 프레임 이벤트

Frame 관련 이벤트는 특정 DOM 문서에 관련된 이벤트가 아니라 Frame 자체에 대한 이벤트
Frame 이벤트 중에서는 load 이벤트가 가장 많이 사용
Load는 문서 및 자원들이 모두 웹 브라우저에 탑재되면 이벤트를 수행
onload - document, image, frame 등이 모두 로딩되었을 때 발생

Event - 폼 이벤트

자주 사용되는 이벤트로 form이 전송될 때에는 submit 이벤트가 발생
Form을 초기화할 때는 reset 이벤트가 발생
submit과 reset은 이벤트 핸들러에서 취소할 수 있다. <input type = "submit" onclick()> 형태에서 onclick 내부에 submit이 구현되어있을 경우 submit이 2중으로 중복되는 상황이 발생한다. → 둘 중 하나는 취소해야함 (일반적으로 input의 submit)

이벤트 핸들러 등록

인라인 이벤트 핸들러
HTML 요소의 내부에서 직접 이벤트 핸들러를 등록
이러한 방식은 HTML 코드를 JavaScript 코드가 침범한다는 문제가 있음
최근 관심받고 있는 CBD(Component Based Development) 방식의 Angular / React / Vue.js 와 같은 framework/library 에서는 인라인 방식으로 이벤트를 처리 (CBVD에서는 html, css, js를 view의 구성 요소로만 보기 때문)
이벤트 핸들러 프로퍼티 방식
HTML에 직접 이벤트 핸들러를 등록하는 방법 대신에 JavaScript에서 이벤트 핸들러를 등록
JavaScript에서 이벤트 핸들러를 등록함으로써 HTML 코드와 JavaScript 코드를 분리
이벤트 대상이 되는 특정 DOM을 선택하고 이벤트 핸들러를 등록
단, 이벤트 핸들러 프로퍼티에 하나의 이벤트 핸들러만을 바인딩 할 수 있다는 단점을 가짐 (여러개 정의할 경우 마지막에 정의한 이벤트만 적용됨)
addEventListner 메서드 방식
전달 인자의 첫 번째에는 이벤트 이름, 두번째에는 이벤트 핸들러, 세번째에는 캡쳐링 여부
첫 번째 전달인자의 이벤트 이름에는 'on'을 제거한 이벤트 이름을 사용
장점
하나의 이벤트에 대해 하나 이상의 이벤트 핸들러를 추가할 수 있음
캡처링과 버블링을 지원
HTML 요소 뿐만 아니라 모든 DOM에 적용 가능

버블링과 캡처링

캡처링
이벤트가 발생한 요소를 포함하는 부모 HTML로부터 이벤트 근원지인 자식요소까지 검사
이벤트 캡쳐링에서 캡쳐속성의 이벤트 핸들러가 등록되어 있으면 수행
버블링
이벤트 발생 요소부터 요소를 포함하는 부모요소까지 올라가면서 이벤트를 검사
이벤트 버블링에서 버블속성의 이벤트 핸들러가 등록되어 있으면 수행

Web Storage

WebStorage API : LocalStorage
데이터를 사용자 로컬에 보존하는 방식
데이터를 저장, 덮어쓰기, 삭제 등 조작 가능
자바스크립트(JavaScript)로 조작
모바일에서도 사용 가능
Cookie와의 차이점
유효기간이 없고 영구적 이용 가능
5MB까지 사용 가능 (쿠키는 4KB까지)
LocalStorage 기본 구성
키(Key)와 값(Value)을 하나의 세트로 저장
도메인과 브라우저별로 저장
값은 반드시 문자열로 저장됨

Web Storage - localStorage vs sessionStorage

SessionStorage와 차이점
local -