2019-07-10 DOM(1)

  • 문서(Document)란 HTML,XML문서 같이 부분적 요소나 내용이 관련된 것들끼리 묶여서 존재하는 요소이다.
  • 구조화 된 문서에 스크립트를 이용하여 접근할때도 구조적으로 접근하는 방식(Object Model)을 제공하는 것이 바로 DOM이다.

DOM Tree

  • DOM을 통해 HTML문서를 트리구조로 볼 수 있다. 원래 DOM은 DNM(Document Node Model)로 불렸지만 부르기 힘들어서 DOM으로 불렸다.
  • Element(태그)뿐만 아니라 Attribute, text까지 노드로 표현되있다. DOM을 통해 스크립트가 문서 내의 모든 요소에 동적으로 접근할 수 있다.
  • DOM구조에 순수 자바스크립트로 접근을 하거나 JQuery 등을 이용해서 접근을 할 수 있다. 순수 자바스크립트로 접근을 하면 코드가 길어진다.

JQuery의 DOM접근 & 순수 JS의 DOM접근

  • 제이쿼리에서는 CSS의 선택자(Selector)방식을 통해 DOM을 접근.

  • 제이쿼리에 비해 순수 JS로 DOM을 접근하는건 긴 메서드 이름을 가진다.
$(function(){
    var a = document.getElementsByTagName("h2");
    console.log(a);

    var b = document.querySelectorAll("h2");
    console.log(b);

    var c = $("h2");
    console.log(c);
});

  • jquery선택자를 통해 반환된 객체는 제이쿼리 객체이고, getElementByTagName을 통해 반환된 객체는 HTML Collection, 쿼리선택자를 통해 반환된 객체는 NodeList이다.
  • 내가 stackoverflow에서 document.getElementsByTagName(‘div’);를 했을때도 HTML Collection이 나왔다.

HTML Collection과 NodeList의 차이

  • NodeList는 DOM-Level-3-core에 정의가 되어있고, HTML Collection은 DOM-Level-2-HTML에 정의가 되어있다.
interface HTMLCollection {
  readonly attribute unsigned long   length;
  Node               item(in unsigned long index);
  Node               namedItem(in DOMString name);
};

interface NodeList {
  Node               item(in unsigned long index);
  readonly attribute unsigned long   length;
};

제이쿼리 선택자의 내부적 처리

  • 제이쿼리는 선택자를 통해 간단하게 DOM을 접근할 수 있다. 하지만 브라우저 내장 메소드에 비해 속도가 느리기때문에 브라우저 내장 메소드를 사용한다. 브라우저별로 지원하는게 다름으로 잘 확인해야한다.

느낀점

DOM, DOM그러는데 DOM이 Document Object Model이라는것만 알뿐 자세히는 몰랐다. 우리가 작성한 HTML을 DOM이라는 트리구조로 만들어서 각각의 요소별로 접근을 하고 데이터를 다룰 수 있는 디테일을 알게되었다. 아직까지는 DOM-Level을 모르기때문에 HTMLCollection과 NodeList에 대해 이해가 안되지만 차근차근 학습하자.

Written on July 10, 2019