DOM manipulation : 새로운 노드를 생성하여 DOM에 추가하거나 기존 노드를 삭제 또는 교체하는 것
Element.prototype.innderHTML : 요소 노드의 HTML 마크업을 취득하거나 변경한다.
Element.insertAdjacentHTML(position, text); : 기존 요소를 제거하지 않으면서 위치를 지정해 새로운 요소를 삽입
👉이미 사용중인 element 는 다시 파싱하지 않는다. 그러므로 element 안에 존재하는 element를 건드리지 않는다. 따라서 innerHTML보다 고효율이다!
HTML을 파싱하여 노드를 생성하고 DOM에 반영하는 방법외에 직접 노드를 생성하고 추가하는 방법도 있다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>노드생성과 추가</title>
</head>
<body>
<ul id="fruits">
<li>Apple</li>
</ul>
</body>
<script>
const $fruits = document.getElementById('fruits');
const $li = document.createElement('li');
const textnode = document.createTextNode('Banana');
$li.appendChild(textnode);
$fruits.appendChild($li);
</script>
</html>
요소 노드 생성 | Document.prototype.createElement(tagName) |
텍스트 노드 생성 | Document.prototype.createTextNode(text) |
텍스트 노드를 요소 노드의 자식 노드로 추가 | Node.prototype.appednChild(childNode) |
요소 노드를 DOM에 추가 | Node.prototype.appendChild |
웹 문서의 요소 중에서 HTML요소를 표현하는 객체 | HTMLElement |
HTML 요소 중에서 input 요소를 표현하는 객체 | HTMLInputElement |
복수의 노드 생성하는 법 : 감싸주는 tag(div)를 활용하는 것이 좋다. 그래야 DOM이 한번만 변경되기 때문!
이 때 불필요한 div가 생겼을 것이다 → 이를 해결하기 위해 Document.Fragment 노드를 사용한다.
Node.prototype.appendChild() : 자신을 호출한 노드의 마지막 자식 노드로 DOM에 추가 / 추가할 위치 지정 불가, 언제나 마지막 자식 노드로 추가
✔ 지정한 위치에 노드 삽입 : Node.prototype.insertBefore(newNode, childNode)
이미 존재한 노드에 appendChild 또는 insertBefore 메서드 사용해서 DOM에 다시 추가하면 현재 위치에서 노드를 제거하고 새로운 위치에 노드를 추가한다.
자신을 호출한 노드의 자식 노드를 다른 노드로 교체
첫 번째 매개변수 newChild : 교체될 새로운 인수 전달
두 번째 매개변수 oldChild : 이미 존재하는 교체될 노드
✔ 이 때 oldChild는 삭제된다.
child 매개변수에 인수로 전달한 노드를 DOM에서 삭제
💡 What is Attribute?
html 태그의 속성값을 부여하는 것
Element.prototype.attributes : 요소 노드의 모든 어트리뷰트 노드를 요소 노드의 프로퍼티로 취할 수 있따. (읽기 전용)
요소 노드의 모든 어트리뷰트 노드의 참조가 담긴 NameNodeMap 객체를 반환한다.
attributes 프로퍼티를 통하지 않고 요소 노드에서 메서드를 통해 직접 HTML 어트리뷰트 값을 취득/변경 가능
값 참조 : getAttribute
값 변경 : setAttribute
존재 확인 : Element.prototype.hasAttribute(attributeName)
특정 html 어트리뷰트 삭제 : Element.prototype.removeAttribute(attributeName) 메서드 사용
인라인 스타일 조작 : HTMLElement.prototype.style : 요소 노드의 인라인 스타일을 취득하거나 추가 or 변경함