#1. Javascript의 DOM

1. DOM의 기본구조

1) DOM이란?

  • DOM이란 문서 객체 모델(Document Object Model)의 약자로 HTML 태그(요소)들을 웹 브라우저에서 자바스크립트로 사용하기 위해 만들어진 웹 문서이다.
  • 객체 모델을 통해 자바스크립트는 동적 HTML을 생성하는데 필요한 모든 기능을 얻을 수 있다.
  • 즉, DOM은 HTML 요소를 가져오고, 변경하고, 추가하거나 삭제하는 방법에 대한 표준이다.

 

2) BOM

  • 웹 개발의 모든 서비스는 웹 브라우저를 바탕으로 실행된다.
  • BOM은 브라우저 객체 모델(Broswer Object Model)의 약자로 웹 브라우저를 통해 실행될 때 자바스크립트가 갖게되는 기본 객제 구조를 말한다.
  • 모든 객체는 window 객체의 하위 객체로서 존재한다.
  • DOM은 BOM의 한 부분이다.

 

3) 작성 방법

  • 자바스크립트의 코드는 <script> 태그 안에서 작성된다. (혹은 src 속성을 통해 연결)
  • HTML 안에서 실해되는 자바스크립트는 document라는 내장 객체를 갖게 된다.
    • 값이 있는 속성 : Attribute
    • 값이 없는 속성 : property
  • HTML 문서의 어느곳에서나 존재할 수 있지만, 보통 <body> 태그의 제일 마지막에 위치한다.
    • 코드 해석을 위에서 부터 순서대로 해석하기 때문에 <head> 태그에 있으면 <script> 태그가 다 불러오기 전까지 <body> 태그를 읽지 않는다.
    • 로딩 속도에도 차이가 있다. (<head>에 위치하면 느림)
    • 페이지 로딩 속도가 빠르기 때문에 검색엔진이 이 페이지를 식별하는데 수월해진다.
    • 구글은 몇 년 전 부터 자바스크립트 코드가 아래에 배치된 페이지를 우선적으로 검색한다.

 

2. HTML 태그를 객체로 가져오기

요소를 사용하기 위해서는 메서드를 통해 태그에 접근해야한다. (메서드를 통해 선택한 요소는 변수에 대입하여 사용할 수 있다.)

1) 태그 이름으로 가져오기

  • 해당 태그명을 가진 요소들을 배열에 담에 인덱스에 맞는 요소를 반환한다.
  • 특정 태그 모두를 가져오기 때문에 반환되는 객체는 항상 배열 형식이다.
  • 반복문 처리가 필요하다. (기본 반복문 사용)
  • 반환되는 객체의 수가 너무 많기 때문에 잘 사용하지 않는다.
const 객체이름 = document.getElementsByTagName("태그이름");

 

2) ID 값으로 가져오기

  • id 값은 HTML 문서 안에서 고유한 요소이므로 항상 단일 객체로 반환된다. (getElement로 끝에 s가 없다.)
  • 반복문이 불필요 하다.
  • 자바스크립트는 중복 id가 있을 경우 처리가 불가능하다.
    • id 값이 중복되면 그 중에 가장 첫 번째 값을 가져온다.
const 객체이름 = document.getElementById("id이름");
			     // id이름 앞에 '#'을 붙이지 않는다.

 

3) class 이름으로 가져오기

  • 해당 class명을 가진 요소들을 배열에 담아 요소를 반환한다.
  • 특정 class가 적용된 모두를 가져오기 때문에 반환되는 객체는 배열 형식이다.
  • 반복문 처리가 필요하다. (for - of문 사용)
const 객체이름 = document.getElementsByClassName("class이름");
			            // class이름 앞에 '.'을 붙이지 않는다.

 

4) CSS 선택자로 단일 객체 가져오기

  • CSS 선택자의 형태에 상관 없이 단일 객체로 반환한다.
  • 만약 동일한 선택자를 적용 받는 요소가 두개 이상인 경우 가장 첫 번째 요소만 반환한다.
const 객체이름 = document.querySelector("CSS선택자");
			  // 선택자 앞에 '.' , '#'을 붙인다.

 

5) CSS 선택자로 복수 객체 가져오기

  • CSS 선택자의 형태에 상관 없이 복수 객체를 배열로 반환한다.
  • 반복문 처리가 필요하다. (forEach문 사용)
  • 리턴 타입이 배열과 비슷한 NodeList 타입의 객체
    • 배열과 특성은 동일하지만, forEach문 이외의 탐색을 위한 메서드는 포함하고 있지 않다.
const 객체이름 = document.querySelectorAll("CSS선택자");
			  // 선택자 앞에 '.' , '#'을 붙인다.

 

3. innerHTML

  • HTML 태그 안에 내용을 넣을 수 있다.
  • 자바스크립트로 가져온 HTML 객체는 innerHTML 이라는 속성값을 갖는다.
  • 이 값에 할당한 내용은 실제 HTML의 시작 태그와 끝 태그 사이에 적용된다.
<body>
  <div id="test"></div>
  
  <script>
    const ex = document.querySelector("#test");
    ex.innerHTML = "이 부분에 innerHTML이 들어간다.";
  </script>
</body>

웹브라우저에서 구현된 모습

 

4. Javascript Event

1) Event의 정의

  • 사용자의 클릭, 마우스 오버, 페이지 로딩 직후, 페이지 종료 직전 등 프로그램이 겪는 어떠한 일.
  • 자바스크립트에는 브라우저 관련 기능 안에 이미 다양한 이벤트를 감지하는 기능이 구현되어, 내장 기능으로 개발자에게 제공된다.

 

2) 이벤트 리스너

  • 어떠한 이벤트가 발생하기를 기다리고 있따가 이벤트 발생시 연결된 함수를 호출해 주는 기능.
  • 이벤트를 감지하는 것은 자바스크립트 안에 이미 내장되어 있지만, 어떤 이벤트가 발생할지는 웹페이지 마다 다를 수 있기 때문에 미리 구현해 놓을 수 없다. (페이지 마다 개별 구현이 필요함)
  • 이벤트를 감지하는 기능이 수행할 동작을 콜백함수로 요구한다.
객체이름.addEventListener("이벤트이름", 콜백함수);

 

3) 이벤트 핸들러

  • HTML 태그의 속성 형태로 존재한다.
  • 이벤트 발생시 실행할 자바스크립트 코드 영역
  • HTML과 자바스크립트 코드를 분리하는 경향이 생기면서 이벤트 핸들러는 거의 사용되지 않는다.
<태그 on이벤트이름="자바스크립트 코드"></태그>

 

5. Javascript Event 종류

1) 마우스 관련

이벤트 리스너 이벤트 핸들러 설명
click onclick 대상을 클릭했을 경우
dblclick ondblclick 대상을 더블 클릭했을 경우
mousedown onmousedown 마우스 버튼을 누르고 있는 동안
mouseup onmouseup 마우스 버튼을 누르고 있다가 땐 경우
mousemove onmousemove 마우스를 움직였을 경우
mouseout onmouseout 대상에서 마우스 포인터가 벗어났을 경우
mouseover onmouseover 대상에 마우스 포인터가 위치했을 경우
dragdrop ondragdrop 대상을 클릭한 상태에서 이동했을 경우

 

2) 키보드 관련

이벤트 리스너 이벤트 핸들러 설명
keydown onkeydown 키가 눌러져 있는 동안 반복 실행된다
keyup onkeyup 키를 눌렀다가 놓았을 경우
keypress onkeypress 화면에 출력되는 키가 눌러질 경우(한글x)
keycode onkeycode 키보드의 각 버튼에 할당된 일련번호
(ex. enter key는 13번)

 

3) form 요소 관련

이벤트 리스너 이벤트 핸들러 설명
submit onsubmit 입력 양식을 서버로 보냈을 경우 (submit을 누른 경우)
change onchange 대상에 입력되어 있는 값이 바뀐 경우
(입력상자, 체크박스, 라디오, 드롭다운 .. )
blur onblur 대상에서 포커스가 빠져나간 경우
focus onfocus 대상에 포커스가 들어 온 경우
reset onreset 대상을 재시작 시켰을 경우
slect onselect 입력 양식의 한 필드를 선택했을 경우

 

4) 브라우저 관련

  • 브라우저 레벨에서 수행되는 이벤트들은 window 객체에서 이벤트를 정의해야한다. (윈도우 페이지를 관여할 때)
이벤트 리스너 이벤트 핸들러 설명
abort onabort 이미지를 읽다가 중단했을 경우
error onerror 에러가 발생했을 경우
load onload 대상을 열었을 경우 (주로 페이지 로딩 직후)
move onmove 윈도우나 프레임을 움직였을 경우
resize onresize 윈도우나 프레임의 크기가 변경됐을 경우
unload onunload 대상을 종료했을 경우
scroll onscroll 스크롤이 발생하는 경우

 

5) 트랜지션 관련

이벤트 리스너 이벤트 핸들러 설명
transitionrun ontransitionrun 트랜지션이 동작하는 동안
transitionstart ontransitionstart 트랜지션이 시작된 경우
transitioncancel ontransitioncancel 트랜지션이 취소된 경우
transitionend ontransitionend 트랜지션이 종료된 경우

 

+ Recent posts