본문 바로가기

져진의 JS 공부

DOM은 어떻게 사용하둄?

글을 시작하며..

 

DOM이란, html이나 xml 같은 문서에 요소들을 트리구조의 형태로 표현하여 조작이 가능하게끔 해주는 인터페이스입니다.

 

DOM에 대해 자세하게 알기 전 우선 가족 족보에 대해 생각해봅시다.

왼쪽의 사진을 예시로 들어 설명하도록 하겠습니다.

부모님으로부터 아들과 딸이 있고 이들은 부모 자식의 관계입니다.

또 아들과 딸은 서로 형제 관계이며, 손자와 손녀와는 부모 자식 관계라고도 할 수 있습니다.

 

HTML 문서와 족보를 연관지어서 생각해본다면

부모님은 <html>, 아들과 딸을 각각 <head>와 <body>라고 할 수 있고, 

그 아래에 손자와 손녀들은 <head>와 <body> 안에 있는

다양한 요소들이라고 할 수 있습니다.

 

이러한 트리 구조를 통해 HTML 문서의 각 요소를 접근, 수정, 생성 등을 하는 방법에 대해 글을 작성하도록 하겠습니다.

( 맨 마지막에 요약있습니다. )

 

 


1. Document

DOM은 Document Object Model의 약자 입니다. 여기에서 Document란 무엇일까요?

Document는 문서라는 뜻을 가지고 있습니다. 이 Document는 HTML문서를 가리키는 것이죠.

한마디로 'Document === HTML' 이라고 생각하시면 됩니다.

 

이 Document는 자바스크립트에서 객체 취급을 하기 때문에

자바스크립트에서 Document가 제공하는 메소드를 활용하여 HTML 요소들을 사용 할 수 있게 합니다.

 


2. 요소의 접근

요소에 접근 하는 방법은 여러가지가 있습니다. 하나하나 알아가도록 하겠습니다.

 

1. document.getElementById("아이디")

getElementById()는 document의 정적 메소드입니다.

이 방법은 아이디 값을 사용하여 요소에 접근하는 방식입니다.

 

아이디는 아이디 당 하나의 요소만 가리킬 수 있기 때문에 단일 요소로 반환됩니다.

 

 

2. document.getElementsByClassName("클래스")

getElementsByClassName()은 document의 정적 메소드입니다.

이 방법은 클래스 이름을 사용하여 요소에 접근하는 방식입니다.

 

클래스는 여러 개의 요소를 가리킬 수 있기 때문에

HTML 요소 중 해당 클래스를 가진 요소를 모두  배열의 형태로 반환됩니다.

 

 

3. document.getElementsByTagName("태그")

getElementsByTagName()은 document의 정적 메소드입니다.

이 방법은 태그 이름을 사용하여 요소에 접근하는 방식입니다.

 

태그도 클래스와 마찬가지로 여러 개의 요소를 가리킬 수 있기 때문에

HTML 요소 중 해당 태그를 가진 요소를 모두 배열의 형태로 반환됩니다.

 

 

4. document.querySelector("아이디 | 클래스 | 태그")

querySelector()는 document의 정적 메소드입니다.

이 방법은 아이디, 클래스, 태그 중 하나를 사용하여 요소에 접근하는 방식입니다.

 

요소를 CSS방식으로 검색하기 때문에

  • 아이디 값  =>  #아이디 값
  • 클래스 이름  =>  .클래스 이름
  • 태그 이름  =>  태그 이름

이러한 방식으로 인자를 작성하면 됩니다.

 

querySelector()는 지정한 인자를 기준으로 해당하는 첫번째 요소를 반환하기 때문에 단일 요소로 반환됩니다.

 

 

5. document.querySelectorAll("아이디 | 클래스 | 태그")

querySelectorAll()은 document의 정적 메소드입니다.

이 방법은 querySelector() 와 마찬가지로 아이디, 클래스, 태그 중 하나를 사용하여 요소에 접근하는 방식입니다.

요소 검색 방법도 CSS방식으로 동일합니다.

 

두 메소드의 차이점은 첫번째 요소만 반환하느냐, 모두 반환하느냐 입니다.

당연히 querySelectorAll() 메소드에 'All'이 붙어있으니 이 메소드가 해당 요소를 모두 반환하는 것 입니다.

 

그래서 querySelectorAll()dms 지정한 인자를 기준으로

해당하는 모든 요소를 반환하기 때문에 배열의 형태로 반환됩니다.


3. 요소 수정

HTML의 모든 요소들은 HTMLElement로 부터 상속받는 자식 요소들로

HTMLElement가 제공하는 메소드나 속성을 사용할 수 있는데요.

 

HTMLElement의 인스턴스 속성 중 하나인 innerText는 요소의 텍스트 콘텐트를 설정하거나 반환하는 속성으로

지정되어있는 텍스트를 수정할 수 있습니다.

 

또 다른 속성으로 style은 요소를 이용하면 요소의 스타일을 수정할 수도 있습니다.


4. 요소 생성&추가

요소를 새로 생성하기 위해서는 createElement()로 새롭게 만들 요소의 태그를 인자에 작성하여 생성합니다.

 

생성한 요소를 문서에 추가하려면 기존 HTML 문서에 있는 어떤 요소를 선택한 후

그 요소의 자식 요소로 생성한 요소를 추가해주면 되는데 이때 사용하는 속성은 appendCild()입니다.

const title = document.createElement('h1');  // 요소 생성
const body = document.querySelector('body');  // 부모 요소 지정

title.innerText = 'Hello';

body.appendChild(title);  // 자식 요소로 추가

글을 마무리하며..

이렇게 DOM을 이용하여 요소를 가져와서 바꾸기도, 요소를 새로 생성하는 법을 꼭 알고

이벤트와 함께 더 다채로운 코딩을 하는 멋찐 개발자가 됩시다. 글 읽어주셔서 감사합니다.


 

요약

Document란?
>> HTML문서를 가리키는 것

요소의 접근 방법
1. document.getElementById("아이디")
2. document.getElementsByClassName("클래스")
3. document.getElementsByTagName("태그")
4. document.querySelector("아이디 | 클래스 | 태그")
5. document.querySelectorAll("아이디 | 클래스 | 태그")

요소의 수정
>> HTMLElement가 제공하는 메소드나 속성을 사용하여 수정

요소 생성
>> document.createElement()

요소 추가
>> 부모요소.appendCild()





'져진의 JS 공부' 카테고리의 다른 글

이벤트란?  (1) 2024.09.25
함수? 함 배워볼까??  (0) 2024.08.13
Var는 사용하면 안되나Var...  (0) 2024.08.08