DOM(Document Object Model)이란
웹 페이지에 나타나는 HTML 문서 전체를 객체로 표현한 것
이때 각 객체를 노드(Node)라는 용어로 표현하고, 태그는 요소 노드, 문자는 텍스트 노드로 구분
HTML의 계층 구조는 DOM에서도 반영되는데 이러한 계층구조를 나무에 비유해서 DOM 트리라고 부른다
프로퍼티 | 유형 | 결과 |
---|---|---|
element.children | 자식 요소 노드 | element의 자식 요소 모음(HTMLCollection) |
element.firstElementChild | 자식 요소 노드 | element의 첫 번째 자식 요소 하나 |
element.lastElementChild | 자식 요소 노드 | element의 마지막 자식 요소 하나 |
element.parentElement | 부모 요소 노드 | element의 부모 요소 하나 |
element.previousElementSibling | 형제 요소 노드 | element의 이전(previous) 혹은 좌측(left)에 있는 요소 하나 |
element.nextElementSibling | 형제 요소 노드 | element의 다음(next) 혹은 우측(right)에 있는 요소 하나 |
node.childNodes | 자식 노드 | node의 자식 노드 모음(NodeList) |
node.firstChild | 자식 노드 | node의 첫 번째 자식 노드 하나 |
node.lastChild | 자식 노드 | node의 마지막 자식 노드 하나 |
node.parentNode | 부모 노드 | node의 부모 요소 하나 |
node.previousSibling | 형제 노드 | node의 이전(previous) 혹은 좌측(left)에 있는 노드 하나 |
node.nextSibling | 형제 노드 | node의 다음(next) 혹은 우측(right)에 있는 노드 하나 |
프로퍼티 | 내용 | 참고사항 |
---|---|---|
element.innerHTML | 요소 노드 내부의 HTML코드 문자열로 리턴 | 요소 안의 정보를 확인할 수도 있지만, 내부의 HTML 자체를 수정할 때 좀 더 자주 활용 |
element.outerHTML | 요소 노드 자체의 전체적인 HTML 코드를 문자열로 리턴 | outerHTML은 새로운 값을 할당하면 요소 자체가 교체되어 버리기 때문에 주의 |
element.textContent | 요소 노드 내부의 내용들 중에서 HTML을 제외하고 텍스트만 리턴 | textContent는 말그대로 텍스트만 다루기 때문에 HTML태그를 쓰더라도 모두 텍스트로 처리됨 |
innerHTML, outerHTML는 띄어쓰기, 들여쓰기 등 포함하여 출력한다
outerHTML 주의점
새로운 값을 할당했을 때 해당 요소 자체를 가리키는 특성 때문에 요소자체가 새로운 요소로 교체되는 결과를 얻게 된다. outerHTML에 값을 할당하면 처음 선택한 요소는 사라진다
const myTag = document.querySelector('#tag');
// innerHTML
console.log(myTag.innerHTML);
// outerHTML
console.log(myTag.outerHTML);
// textContext
console.log(myTag.textContent);
prepend, before는 전달한 순서 그대로 파라미터를 한 번에 해당 위치에 추가한다
대부분의 HTML 속성은 DOM 객체의 프로퍼티로 변환이 된다
표준 속성이 아닌 경우에는 프로퍼티로 변환이 안 되는데 아래 메소드를 활용하면 표준이 아닌 HTML 속성들도 다룰 수 있다
속성에 접근하기: element.getAttribute('속성')
속성 추가(수정)하기: element.setAttribute('속성', '값')
클래스 속성은 프로퍼티 이름으로 접근할 때는 className이지만 getAttribute로 접근할 때는 'class'라는 문자열을 전달
대소문자 구분을 하지 않는다
자바스크립트로 태그의 스타일을 다루는 방법에는 크게 두 가지가 있다.
style 프로퍼티 활용하기: element.style.styleName = 'value';
class 변경을 통해 간접적으로 스타일 적용하기: element.className, element.classList
className 프로퍼티로 값을 변경하면 클래스 속성값 전체가 바뀌게된다
classList는 클래스 속성값을 유사배열로 다룬다
classList의 유용한 메소드
프로퍼티 | 내용 | 참고사항 |
---|---|---|
classList.add | 클래스 추가하기 | 여러 개의 값을 전달하면 여러 클래스 추가 가능 |
classList.remove | 클래스 삭제하기 | 여러 개의 값을 전달하면 여러 클래스 삭제 가능 |
classList.toggle | 클래스 없으면 추가, 있으면 삭제하기 | 하나의 값만 적용 가능하고, 두 번째 파라미터로 추가 또는 삭제 기능을 강제할 수 있음 |
참고
코드잇