본문 바로가기
Java Script

JS - DOM

by 호지96 2021. 4. 26.

1. DOM ( Document Object Model )

 

  1. DOM 은 HTML 요소를 Object( JS OBject )처럼 조작( Manipulation ) 할 수 있는 모델이다.
  2. 즉, JS 를 사용할 수 있다면 DOM 으로 HTML 을 조작할 수 있다..

** 트리구조 : 트리구조의 가장 큰 특징은 부모가 자식을 여러 개 가지고, 부모가 하나인 구조가 반복된다.

1 - 1) NodeList

  1. Nodelist 객체는 일반적으로 childNodesquerySelectorAll 과 같은 메서드에 의해 반환되는 노드의 콜렉션이다.
  2. NodelistArray 가 아니지만, forEach() 를 사용하여 반복할 수 있다. 또한 Array.from() 을 사용하여 Array 로 변환할 수도 있다.

-----------------------------------------------------------------------------------

2. DOM 사용

 

  1. JS 에서 DOMdocument 객체에 구현되어 있다.
  2. 개발자 도구 콘솔창에서 document 객체를 조회할 수 있다.
  3. DOM 구조를 조회할 때에는 console.dir 이 유용하다. console.dirDOM 을 객체의 모습으로 출력한다.

-----------------------------------------------------------------------------------

3. HTML 에 JS 적용

 

  1. 웹 브라우저가 작성된 코드를 해석하는 과정에서 <script> 태그를 만나면, 웹 브라우저는 HTML 해석을 잠시 멈춘다.
  2. 해석을 멈춘 웹 브라우저는 <script> 태그를 먼저 실행한다.
  3. <script> 요소는 등장과 함께 실행된다.

 

3 - 1) script 태그를 추가하는 2가지 방법

  1. <head> 태그안에 추가하는 방법
  2. <body> 태그가 끝나기 전에 추가하는 방법

** <script> 태그의 위치에 따라서 결과값이 달라진다. **

 

-----------------------------------------------------------------------------------

4. document 객체를 통해 HTML 엘리먼트를 CRUD 하기

** CRUD : Create Read Update Delete

 

4 - 1) 개발자 콘솔

  1. 새로운 div 를 생성해도 노드가 연결이 되어있지 않다.
  2. 새로 만들어낸 요소는 append 를 이용하여 연결해주어야 한다.

 

4 - 2) DOM 의 엘리먼트 조회

  1. DOM 으로 HTML 엘리먼트 정보를 조회하기 위해서는 querySelector 메소드를 사용해 조회할 수 있다.
  2. 셀렉터로는 HTML 태그(), id(), class() 세 가지가 가장 많이 사용된다.
  3. 단 하나의 엘리먼트가 아닌 여러 개의 엘리먼트는 querySelectorAll 을 사용하면 된다.
  4. 이렇게 조회된 HTML 엘리먼트들은 배열이 아닌 Array-like Object 라고 부른다.

 

4 - 3) DOM 엘리먼트 Update

  1. textContent 를 사용하면 업데이트 가능
  2. classList.add 메소드로 class 업데이트 가능

 

4 - 4) DOM 엘리먼트 Delete

  1. remove 메소드로 삭제가능
  2. innerHTML 을 사용하면 모든 자식 엘리먼트를 지울 수 있다. 하지만 보안상 몇 가지 문제를 가지고 있어 다른 메소드를 사용한다.
  3. removeChild 는 자식 엘리먼트를 지정해서 삭제하는 메소드이다. 반복문을 사용하여 지울 수 있다.

-----------------------------------------------------------------------------------

5. 여러 차이점 정리

 

5 - 1) append 와 prepend 의 차이

  1. append 메서드는 문서의 마지막 자식 뒤에 Node 개체 또는 DOMString 개체 집합을 삽입한다.
  2. DOMString 객체는 동등한 Text 노드로 삽입된다.
  3. prepend 메서드는 문서의 첫 번째 자식 앞에 Node 개체 또는 DOMString 개체 집합을 삽입한다.

 

5 - 2) textContents 와 innerHTML 의 차이

  1. textContent 는 노드의 모든 요소를 반환한다.
  2. innerHTML 은 이름 그대로 HTML 을 반환한다. 간혹 HTML 을 이용해 요소의 텍스트를 가져오거나 쓰는 경우가 있지만, HTML 로 분석할 필요가 없다는 점에서 textContent 의 성능이 더 좋다. 그리고 XSS Attack 의 위험이 존재한다.

 

5 - 3) element 와 node 의 차이

  1. Node 는 여러가지 DOM 타입들이 상속하는 인터페이스이며 그 다양한 타입들을 비슷하게 처리할 수 있게 한다.
  2. elementDocument 안의 모든 객체가 상속하는 제일 범용적인 기반 클래스로, 공통 메서드와 속성만 가지고 있으며, 특정 요소를 더 상세하게 표현하는 클래스가 Element 를 상속한다.

 

5 - 4) children 과 childNodes 의 차이

  1. children 속성은 요소의 children 요소 컬렉션을 HTML 컬렉션 개체로 반환한다.
  2. childNodes 속성은 노드의 하위 노드 컬렉션을 NodeList 개체로 반환한다. 컬렉션의 노드는 소스 코드에 표시되는 대로 정렬되며 인덱스 번호로 액세스 할 수 있다.

 

5 - 5) remove 와 removeChild 의 차이

  1. removeChildDOM 에서 하위 노드를 제거하고 제거된 노드를 반환한다. 메모리는 남고 트리 구조상에서만 제거된다.
  2. remove 메소드는 이를 포함하는 트리로부터 객체를 제거한다.

 

'Java Script' 카테고리의 다른 글

JS - 객체 지향  (0) 2021.05.10
JS - 고차함수  (0) 2021.04.28
JS - Spread / Rest 문법  (0) 2021.04.23
JS - 클로저  (0) 2021.04.22
JS - 스코프  (0) 2021.04.22