🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Lang
JS-DOM
00-DOM으로 조작

1. DOM이란?

HTML에서 요소로 불리는 태그 등을 자바스크립트에서는 문서 객체(Document Object)라고 부른다. 즉, DOM은 Document Objects Model의 약자로 문서 객체를 조합해서 만든 전체적인 형태로 문서 객체 모델이라고 불린다.

1
<head>
2
<script></script>
3
</head>
4
<body>
5
<div></div>
6
</body>

보통 스크립트를 선언하는 위치는 head 태그 안에 위치한다.

그런데 이러한 경우 DOM을 조작하게 되면, 자바스크립트 코드가 실행된 후 HTML 태그들이 불러오므로 문제가 발생한다. 문제를 해결하는 방법은 2가지가 있는데


2. JS 코드 부르는 방법

1
<body>
2
<div></div>
3
<script></script>
4
</body>

첫 번째는 모든 태그들을 작성하고, body 태그 맨 마지막에 자바스크립트를 실행하는 방법

1
document.addEventListener('DOMContentLoaded', function () {
2
// 코드 작성
3
})

두 번째는 문서 전체에 해당하는 document에 DOMContentLoaded 이벤트를 사용하는 방법이다.


3. 문서 객체를 가져오려면

1
document.head
2
document.title
3
document.body

HTML 문서에서 당연히 있는 내용들은 태그별로 가져올 수 있다.

1
document.getElementsByTagName('태그')
2
document.getElementById('아이디명')
3
document.getElementsByClassName('클래스명')
  • 그 외에 태그를 가져오려면 getElementsByTagName
  • 아이디로 가져오려면 getElementById
  • 클래스로 가져오려면 getElementsByClassName을 사용한다.

그런데 이런 식으로 사용하면 하위 태그에 접근할 때마다 매번 사용해야 해서 불편하다.

1
document.querySelector(선택자)
2
document.querySelectorAll(선택자)

그래서 CSS 선택자를 사용하는 방식으로 가져오는 querySelectorquerySelectorAll을 사용할 것을 권장한다.

  • querySelectorAll은 여러 개를 배열로 가져오는 방식으로
  • 내부에 하나하나 접근하려면 forEach를 같이 사용한다.

4. 문서 객체에 접근했다면

4.1 문자, HTML 형태로 넣기

1
문서 객체.textContent
2
문서 객체.innerHTML

문서 객체 내에

  • 문자 그대로 넣는 textContent
  • HTML 형식으로 넣는 innerHTML

4.2 속성 추가, 수정, 삭제

1
문서 객체.setAttribute(속성 이름, )
2
문서 객체.getAttribute(속성 이름)
  • 문서 객체의 속성을 추가하거나 수정할 때는 setAttribute
  • 문서 객체의 속성을 가져오려면 getAttribute

4.3 스타일 조작

1
문서 객체.style.속성 = "값"

문서 객체의 스타일을 조작할 때는 style로 접근할 수 있다.

  • style 속성은 만약 background-colorbackgroundColor처럼
  • - 기호 대신 카멜 케이스로 사용해야 한다.

4.4 스타일 조작 - classList

사실 스타일을 조적할 때 style로 접근하는 방식보다 미리 클래스에 스타일을 지정하고

1
문서 객체.classList.add("클래스명")
2
문서 객체.classList.remove("클래스명")
3
4
문서 객체.classList.contains("클래스명")
5
문서 객체.classList.toggle("클래스명")

classList로 해당 클래스를 추가, 삭제로 조작하는 것을 추천한다.

  • contains는 해당 클래스명 유무를 체크하는데,
  • 있는지 없는지에 따라 if 조건문을 사용해도 되고
  • 있다면 삭제, 없다면 추가를 알아서 해주는 toggle을 사용해도 된다.

4.5 문서 객체 추가

1
const 자식 객체 = document.createElement(문서 객체 이름)
2
부모 객체.appendChild(자식 객체)
  • createElement로 문서 객체를 생성하고
  • appendChild로 부모 객체에 자식 객체를 추가할 수 있다.

4.6 문서 객체 삭제

반대로,

1
부모 객체(문서 객체.parentNode).removeChild(자식 객체)

부모 객체에서 자식 객체를 삭제할 수 있다. 만약 부모 객체에 접근해야 한다면 parentNode를 사용한다.


4.7 이벤트 추가

모든 문서 객체에는 클릭되거나 마우스를 위에 올리거나 등 이벤트를 가지고 있다.

1
문서 객체.addEventListener(이벤트 이름, 함수)

addEventListener로 이벤트 이름과 함수를 지정하면, 문서 객체의 해당 이벤트가 실행되면 지정한 함수가 실행된다.


4.8 이벤트 삭제

1
문서 객체.removeEventListener(이벤트 이름, 함수)

반대로, 이벤트를 제거하고 싶다면 removeEventListener를 사용한다.