가장 상위에 위치하는 <html>
은 루트
문서 노드
DOM tree에 접근하기 위한 시작점
요소 노드
HTML 요소를 표현
요소는 중첩에 의해 부자 관게를 가지며, 부자 관계를 통해 정보를 구조화함
텍스트 노드
HTML요소의 텍스트를 표현, 요소노드의 자식이며, 자신의 자식 노드를 가질 수 없음
속성 노드
HTML 요소의 속성을 표현
(1) document 객체의 createElement 메소드를 활용, div element를 만들기
let comment = document.createElement("div");
comment.className = 'comment';
console.log(comment) // <div class="comment"></div>
(2)documnet 객체의 append 메소드를 활용, 다른 엘리먼트에 삽입
document.body.append(comment)
comment.textContent = 'dev';
console.log(comment) // <div class="comment">dev</div>
comment.classList.add('tweet')
console.log(commnet) // <div class='comment tweet'>dev</div>
const elems = document.getElementsByClassName('red');
console.log([...elems]); // [li#one.red, li#two.red, li#there.red]
const oneTweet = document..querySelector('.tweet')
// querySelector로 클래스 이름이 tweet인 HTML 엘리먼트를 조회
const elem = document.querySelector('#two');
elem.parentNode.className = 'blue'
elem.firstChild.className = 'blue';
elem.lastChild.className = 'blue';
대부분 브라우저들은 요소 사이의 공백 또는 줄바꿈 문자를 텍스트 노드로 취급
그래서 firstElementChild, lastElementChild를 사용할 수 있음
const elem = document.querySelector('ul');
if (elem.hasChildNodes()) {
console.log(elem.childNodes);
console.log(elem.children);
}
<div class="wrap">
This is fruit.
<span>banana</span>
<span>apple</span>
Fruit is delicious.
</div>
'Element'의 속성으로 해당 Element의 HTML, XML을 읽어오거나, 설정할 수 있음
자기자신은 텍스트값만, 자식들은 텍스트와 태그값까지 모두 가져옴
document.querySelector('.wrap').innerHTML;
결과
This is fruit.
banana
apple
Fruit is delicious.
해당 Element 내에서 사용자에게 '보여지는' 텍스트의 값을 읽어옴
자기자신과 자식 태그들의 텍스트값만 가지고 오지만 스타일링 정보는 제외하고 가져옴
document.querySelector('.wrap').innerText;
결과
This is fruit. banana apple Fruit is delicious.
자기자신과 자식 태그들의 텍스트 뿐만 아니라 줄바꿈, 띄워쓰기와 같은 스타일링 정보까지 같이 가져옴
document.querySelector('.wrap').textContent;
결과
This is fruit.
banana
apple
Fruit is delicious.