🪐 노드의 종류
노드 설명 문서 노드(document node) HTML 문서 전체를 나타내는 노드 요소 노드(element node) 모든 HTML 요소는 요소 노드이며, 속성 노드를 가질 수 있는 유일한 노드 속성 노드(attribute node) 모든 HTML 요소의 속성은 속성 노드이며, 요소 노드에 관한 정보를 가지고 있음. ❗ 하지만 해당 요소 노드의 자식 노드(child node)에는 포함되지 않음. 텍스트 노드(text node) HTML 문서의 모든 텍스트는 텍스트 노드 주석 노드(comment node) HTML 문서의 모든 주석은 주석 노드

형제 노드(sibling node)란 같은 부모 노드를 가지는 모든 노드를 가리킵니다.조상 노드(ancestor node)란 부모 노드를 포함해 계층적으로 현재 노드보다 상위에 존재하는 모든 노드를 가리킵니다.자손 노드(descendant node)란 자식 노드를 포함해 계층적으로 현재 노드보다 하위에 존재하는 모든 노드를 가리킵니다.🐥 노드로의 접근
getElementsByTagName() 메소드를 이용하는 방법노드 간의 관계를 이용하여 접근하는 방법🐠 getElementsByTagName() 메소드를 이용하는 방법
const codeName = document.querySelector("tag")
const codeName = document.getElementById("id")
const codeName = document.getElementsByClassName("class")
🐠 노드 간의 관계를 이용하여 접근하는 방법
parentNode: 부모 노드childNodes: 자식 노드 리스트firstChild: 첫 번째 자식 노드lastChild: 마지막 자식 노드nextSibling: 다음 형제 노드previousSibling: 이전 형제 노드
// HTML 문서의 모든 자식 노드 중에서 두 번째 노드의 이름을 선택함. document.getElementById("document").innerHTML = document.childNodes[1].nodeName; // HTML // html 노드의 모든 자식 노드 중에서 첫 번째 노드의 이름을 선택함. document.getElementById("html").innerHTML = document.childNodes[1].childNodes[0].nodeName; // HEAD
🐥 노드의 추가
appendChild()insertBefore()insertData()🐠 appendChild() 메소드
마지막에 추가function appendNode() { let parent = document.getElementById("list"); // 아이디가 "list"인 요소를 선택함. let newItem = document.getElementById("item"); // 아이디가 "item"인 요소를 선택함. parent.appendChild(newItem); // 해당 요소의 맨 마지막 자식 노드로 추가함. }
🐠 insertBefore() 메소드
앞에 추가새로운 자식 노드 : 자식 노드 리스트(child node list)에 새롭게 추가할 자식 노드를 전달기준 자식 노드 : 새로운 노드를 삽입할 때 기준이 되는 노드로, 이 노드 바로 앞에 새로운 노드가 추가function appendNode() { let parent = document.getElementById("list"); // 아이디가 "list"인 요소를 선택. let criteriaItem = document.getElementById("criteria"); // 아이디가 "criteria"인 요소를 선택. let newItem = document.getElementById("item"); // 아이디가 "item"인 요소를 선택. parent.insertBefore(newItem, criteriaItem); // 해당 노드를 기준이 되는 자식 노드의 바로 앞에 추가함. }
🐠 insertData() 메소드
텍스트 노드의 텍스트 데이터에 새로운 텍스트를 추가오프셋(offset) : 오프셋 값은 0부터 시작하며, 기존 텍스트 데이터의 몇 번째 위치부터 추가할지를 전달.새로운 데이터 : 새로이 삽입할 텍스트 데이터를 전달.let text = document.getElementById("text").firstChild; // 아이디가 "text"인 요소의 텍스트 노드를 선택함. function appendText() { text.insertData(6, " 나른한 "); // 텍스트 노드의 6번째 문자부터 " 나른한 "이란 텍스트를 추가. }
🐥 노드의 생성
createElement()createAttribute()createTextNode()🐠 createElement() 메소드
function createNode() { let criteriaNode = document.getElementById("text"); // 기준이 되는 요소로 아이디가 "text"인 요소를 선택함. let newNode = document.createElement("p"); // 새로운 <p> 요소를 생성함. newNode.innerHTML = "새로운 단락입니다."; document.body.insertBefore(newNode, criteriaNode); // 새로운 요소를 기준이 되는 요소 바로 앞에 추가함. }
🐠 createAttribute() 메소드
function createNode() { let text = document.getElementById("text"); // 아이디가 "text"인 요소를 선택함. let newAttribute = document.createAttribute("style"); // 새로운 style 속성 노드를 생성함. newAttribute.value = "color:red"; text.setAttributeNode(newAttribute); // 해당 요소의 속성 노드로 추가함. }
🐠 createTextNode() 메소드
function createNode() { let elementNode = document.getElementById("text"); // 아이디가 "text"인 요소를 선택함. let newText = document.createTextNode("새로운 텍스트에요!"); // 새로운 텍스트 노드를 생성함. elementNode.appendChild(newText); // 해당 요소의 자식 노드로 추가함. }
🐥 노드의 삭제
removeChild()removeAttribute()🐠 removeChild() 메소드
let parent = document.getElementById("list"); // 아이디가 "list"인 요소를 선택함. let removedItem = document.getElementById("item"); // 아이디가 "item"인 요소를 선택함. parent.removeChild(removedItem); // 지정된 요소를 삭제함.
🐠 removeAttribute() 메소드
let text = document.getElementById("text"); // 아이디가 "text"인 요소를 선택함. text.removeAttribute("style"); // 해당 요소의 "style" 속성을 제거함.
🐥 노드의 값 변경
nodeValue 프로퍼티를 사용하면 특정 노드의 값을 변경setAttribute() 메소드는 속성 노드의 속성값을 변경🐠 nodeValue 프로퍼티
let para = document.getElementById("text"); // 아이디가 "text"인 요소를 선택함. function changeText() { para.firstChild.nodeValue = "텍스트 변경 완료!"; // ❗ 해당 노드의 텍스트(자식 노드)를 변경해야 하므로 firstChild를 해줘야한다 }
🐠 setAttribute() 메소드
let para; function changeAttribute() { // 모든 <p> 요소중에서 첫 번째 요소에 클래스 속성값으로 "para"를 설정함. document.getElementsByTagName("p")[0].setAttribute("class", "para"); // 클래스가 설정되면 해당 클래스에 설정되어 있던 스타일이 자동으로 적용됨. }
🐥 요소 노드의 교체
replaceChild()메소드를 사용하여 기존의 요소 노드를 새로운 요소 노드로 교체새로운 자식 노드 : 자식 노드 리스트에 새롭게 추가할 요소 노드를 전달.기존 자식 노드 : 자식 노드 리스트에서 제거할 요소 노드를 전달.let parent = document.getElementById("parent"); // 부모 노드를 선택함. let first = document.getElementById("first"); let third = document.getElementById("third"); function changeNode() { parent.replaceChild(third, first); // first 요소를 삭제하고, 그 대신 third 요소를 삽입함. }
🐥 텍스트 노드의 교체
replaceData()메소드를 사용하여 텍스트 노드의 텍스트 데이터를 변경오프셋(offset) : 오프셋 값은 0부터 시작하며, 기존 텍스트 데이터의 몇 번째 문자부터 교체할지를 전달.교체할 문자 수 : 기존 텍스트 노드의 데이터로부터 교체할 총 문자 수를 전달.새로운 데이터 : 새로 삽입할 텍스트 데이터를 전달.let text = document.getElementById("text").firstChild; // 아이디가 "text"인 요소의 텍스트 노드를 선택함. function changeText() { text.replaceData(7, 4, "저녁 7"); // 텍스트 노드의 7번째 문자부터 4개의 문자를 "저녁 7"로 교체함. }