DOM은 이렇게 Objects(객체들)의 트리구조로 만들어진다.
DOM을 구성하는 이 객체들을 Node라 부른다.
<div>
, <span>
등의 태그 뿐만 아니라 태그가 존재하지 않는 그냥 text
도 포함한다.Node.ELEMENT_NODE
Node.ATTRIBUTE_NODE
Node.TEXT_NODE
Node.CDATA_SECTION_NODE
Node.PROCESSING_INSTRUCTION_NODE
Node.COMMENT_NODE
Node.DOCUMENT_NODE
Node.DOCUMENT_TYPE_NODE
Node.DOCUMENT_FRAGMENT_NODE
Node.NOTATION_NODE
노드에는 다양한 종류가 있고, 그 중 일반적으로 element
라고 불리는 것이 Node.ELEMENT_NODE
를 뜻한다. 즉, Node가 Element의 상위 개념인 것이다.
아무래도 HTML을 조작하는데 가장 많이 쓰는게 이 element가 아닐까 싶다.
👇 DOM 의 객체에는 정말 많은 속성과 메소드가 존재하지만, 핵심적인 것들만 간단히 정리해보려 한다.
document.createElement('div')
이렇게하면 하나의 Node가 생성되지만, 이는 트리구조 내에서 그 어떤 요소와도 연결되어 있지 않은 상태다.
const createdEl = document.createElement('div')
document.body.append(createdEl) // undefined
Document의 body 내에 createdEl을 집어넣는다.
document.body.append(div,p,'hi') // undeifined
위와 같이 다중으로 한번에 append 할 수 도 있고, 단순 text
도 append 가능하다.
문자열
를 넣으려 하면 에러가 뜬다.document.body.appendChild('hi') // Uncaught TypeError
document.body.appendChild(div) // div(Node object)
document.querySelector('#id')
document.querySelector('tag')
document.querySelector('.class')
document.querySelectorAll('div')
예시)
// NodeList(3) [ div.first, div.second, div-third ]
이런식으로 출력된다.
exDiv.textContent = 'hi'
console.log(exDiv); // <exDiv>hi</exDiv>
script
의exDiv.innerHTML = 'hi'
console.log(exDiv); // <exDiv>hi</exDiv>
exDiv.innerHTML = '<a href="#none">Link</a>'
console.log(exDiv); // <exDiv><a href="#none">Link</a></exDiv>
exDiv.innerHTML = ''; // 해당 exDiv 요소 삭제
exDiv.classList.add = 'exClass'
console.log(exDiv); // <exDiv class="exClass">hi</exDiv>
exDiv.classList.add = 'exClass'
console.log(exDiv); // <exDiv class="exClass">hi</exDiv>
exDiv.setAttribute('id', 'newId');
exDiv.setAttribute('class', 'newClass');
console.log(exDiv); // <exDiv id='newId' class="newClass">hi</exDiv>
exDiv.remove();
const delNode = parentNode.removeChild(exDiv);
anotherParentNode.append(delNode);