새로운 요소 노드 객체 생성 createElement
var element = document.createElement(요소의 이름);
예를 들어 h1요소 객체를 만들 때는 이렇게 사용한다.
var headline = document.createElement("h1");
// 위 코드의 headline에 설정된 프로퍼티 값은 다음과 같다.
console.log(headline.nodeName); // "H1"
console.log(headline.nodeType); // "1"
그러나 DOM 트리의 계층 구조를 뜻하는 프로퍼티(parentNode, childNode 등) 값은 모두 null이다. 즉, createElement로 생성한 노드 객체는 메모리에 생성되어 있을 뿐 문서의 DOM 트리와는 관계가 없다.
위 처럼 노드 객체를 만들었으므로 DOM트리에 삽입해 보자. appendChild와 insertBefore 메서드를 사용한다.
요소의 마지막에 삽입하기 : appendChild
요소 노드.appendChild(삽입할 노드)
appendChild 메서드로 노드 객체를 삽입하면 그 객체가 DOM트리에 추가되고 각 노드에 계층 구조를 정의하는 프로퍼티가 바뀐다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<ul id="doglist">
<li>포메라니안</li>
<li>달마시안</li>
</ul>
</body>
</html>
이 문서에 ul 마지막 자식 요소로 <li>불독</li>
을 삽입하려면 다음과 같은 코드를 작성한다.
let doglist = document.getElementById("doglist");
let element = document.createElement("li");
let text = document.createTextNode("불독");
doglist.appendChild(element);
element.appendChild(text);
지정한 자식 노드의 바로 앞에 삽입 : insertBefore
요소 노드.insertBefore(삽입할 노드, 자식 노드)
앞에서 예로 들었던 HTML문서의 두번째 자식 요소앞에 <li>불독</li>
를 삽입하려면 다음과 같은 코드를 작성한다.
let doglist = document.getElementById("doglist");
let element = document.createElement("li");
let text = document.createTextNode("불독");
// 자식 노드 바로 앞에(before) 삽입
doglist.insertBefore(element, doglist.children[1]);
element.appendChild(text);
HTML 요소를 생성하는 편리한 함수
노드.removeChild(자식노드)
삭제할 수 있는 노드가 해당 노드의 자식 노드. 즉, 삭제하려는 노드의 부모 노드 객체에서 removeChild 메서드를 호출한다.
node.parantNode.removeChild(node);
노드.replaceChild(새로운 노드, 자식 노드)
치환하려는 노드의 부모 노드에서 replaceChild 메서드를 호출한다.
node.parantNode.replaceChild(newnode, node);