간략하게 DOM은 무엇이며, js에서는 어떻게 DOM을 사용하는지 서술하겠다.
Document Object Model(문서 객체 모델)의 약자로, html 문서를 구조화/계층화된 표현으로 나타낸 것을 말한다. 프로그래밍 언어가 html 문서의 구조, 스타일, 내용 등을 변경할 수 있게 돕는다.
js에서 DOM은 문서를 객체(object)로 표현한 것을 말한다.
DOM은 기본적으로 계층을 가진 트리(tree) 구조를 따른다.
DOM의 트리 구조에서 각 객체(object)를 노드(Node)라고 부른다.
총 12종류의 노드가 있으나 자주 쓰이는 노드만 설명하겠다.
document
를 표현하는 노드. 문서 전체를 나타낸다.[요소].[속성명]
식으로 적어 접근할 수 있다. html 요소의 속성(attribute)은 모두 property이기 때문이다.style
속성(CSS 속성)의 경우 [요소].style.[css속성명]
식으로 작성하여 개별적으로 접근할 수 있다.js에서 DOM의 최상위 객체에 접근하는 방법은 document
를 그대로 쓰면 되고, 다른 하위 요소들은 node의 property나 method를 이용해 요소를 얻어낼 수 있다.
주로 쓰는 property나 method를 아래에 간단하게 적겠다. 각 property/method에 대한 내용은 여기를 참고하라.
- 요소 노드 가져오기
- property :
children
,firstElementChild
,lastElementChild
,parentElement
,previousElementSibling
,nextElementSibling
- method :
getElementById()
,getElementsByClassName()
,getElementsByTagName()
,querySelector()
,querySelectorAll()
- 노드 가져오기
- property :
childNodes
,firstChild
,lastChild
,parentNode
,previousSibling
,nextSibling
createElement()
prepend()
, append()
, before()
, after()
html 요소의 속성(attribute)에 접근하려면 [요소].[속성명]
식으로 적어 접근할 수 있다. html 요소의 속성(attribute)은 모두 property이기 때문이다.
class
속성은 property name이 달라져 className
이다. property로 접근할 때 주의하자.getAttribute()
method를 이용하면 비표준 속성을 포함하여 모든 속성에 접근할 수 있다.style
속성(CSS 속성)의 경우 [요소].style.[css속성명]
식으로 작성하여 개별적으로 접근할 수 있다.kebab-case
에서 camelCase
로 바꾸어 주어야 제대로 접근할 수 있다.style
속성이 요소의 속성으로 들어간다. 즉, html 파일 내부로 style
이 작성된다.