본문 바로가기
Front-end/HTML&CSS

[DOM] Document Object Model 이란 ?

by 개미는뚠뚠딴 2020. 9. 22.
반응형

오늘은 DOM(Document Object Model)에 대해서 공부했다.

 

DOM이란 HTML(Document)에 접근하여 Object(JavaScript Object)처럼 HTML을 조작(Manipulation)할 수 있는 Model이다.자바스크립트를 사용하는 방법을 알고 있으면 DOM을 활용하여 HTML을 조작할 수 있다는 의미이다.

 

일단 DOM을 사용하기 위해서는 자식 element 부모 element와의 관계를 잘 알아야 한다.

 

HTML은 트리 구조로 작성이 되는데 이때 겉에 있는 태그가 부모 요소이고 부모 요소 안에 작성된 요소가 자식 요소가 된다.

 

(참고 자료 : html 구조)

이 중 가장 상위의 객체가 document 객체 인데 이 document 객체에는 수많은 속성과 메서드가 포함되어 있다. 

 

document객체의 속성과 메서드를 이용하면 html을 접근하고 조작하는 것이 가능하다.

 

먼저 기본적인 html 을 선언해보겠다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>Dom 실습</title>
</head>
<body>
  <div><h2>간단한 DOM 실습</h2></div>
  <ul>
    <li class="sample">
      <span id="contents">간단한 element 입니다.</span>
    </li>
    <li class="sample">
      <span id="contents2">간단한 element2 입니다.</span>
    </li>
  </ul>
</body>
</html>

 

 

1. CREATE

const createDiv = document.createElement('div');

 

document.createElement() 를 이용하면 element를 쉽게 생성할 수 있다.

 

(그러나 createElement()만 하면 element가 어디에도 연결이 되어 있지 않아 화면상으로는 안나타난다..)

 

 

2. APPEND

 

document.body.append(createDiv);

콘솔창으로 확인

 

콘솔창으로 확인해보니 <body> 안에 맨 마지막에 <div>가 생긴것을 볼 수 있다. 

 

그러나 아직은 보이지 않는다... 

 

 

3. READ

 

이번에는 element를 조회하는 것에 대해서 알아보겠다.

 

const sample = document.querySelector('.sample'); // sample 클래스중 하나만 가져옴
const samples = document.querySelectorAll('.sample') // smaple 클래스를 배열로 모두 가져옴

// 둘 다 같은 결과를 가져온다
const getContents = document.getElementById('contents');
const queryContents = document.querySelector('#contents');

// contents 안에 div 넣어주기
const container = document.querySelector('#contents');
const createDiv = document.createElement('div');
container.append(createDiv);

 

콘솔창으로 확인

 

이번에는 id가 contents인 요소 안에 div가 들어가 있는 것을 확인할 수 있다.

 

 

4. UPDATE

 

이번에는 위에서 넣은 요소안을 꾸며보겠다.

createDiv.textContent = 'asdfasdf';
createDiv.classList.add('sample'); // 생성해준 div 요소에 sample class를 추가해준다.

콘솔창으로 확인

 

넣어주었던 div에 sample class가 추가되고 안에 내용이 추가된 것이 보인다.

 

 

5. DELETE

 

const container = document.querySelector('#contents')
const createDiv = document.createElement('div')
container.append(createDiv)
createDiv.remove() // 이렇게 append 했던 엘리먼트를 삭제할 수 있다.

 

요소의 삭제 방법은 간단하다. 

먼저 .innerHTML = '' 로 간단히 지울 수 있지만 이 방법은 보안상의 위험이 있다고 한다.

document.querySelector('#contents').innerHTML = ''; // 보안상의 위험이 있다.

 

while 문을 이용해 자식요소가 없을 때까지 remove()하는 방법도 있다.

 

const contents = document.querySelector('#contents');
while (contents.firstChild) { // contents의 firstChild가 없을 때까지 반복
  contents.removeChild(contents.firstChild);
}

 

아니면 자식요소를 순회하면서 직접 엘레먼트를 지울 수도 있다.

 

const samples = document.querySelectorAll('.sample') // sample을 class로 갖는 모든 요소를 배열에 저장
samples.forEach(function(sample){ // samples 배열 안에 모든 요소를 직접 찾아 지움
    sample.remove();
})
// or
for (let sample of samples){ // for of 를 이용해서 직접 요소에 접근하여 지울 수 있다.
    sample.remove()
}

 

오늘은 DOM의 개념에 대해서 간단히 공부해보았다. 

 

DOM을 이용하면 html을 조작하는 것이 가능하기때문에 잘 알아두면 좋을 것 같다.

반응형

'Front-end > HTML&CSS' 카테고리의 다른 글

[DOM] <template> 태그를 이용한 DOM 조작  (0) 2020.09.23

댓글