지난 포스트에서 DOM은 무엇이고 어떻게 접근하는지에 대해서 알아보았다. 이번에는 접근한 DOM을 어떻게 다룰 수 있는지에 대해 알아보려고 한다.
요소의 텍스트는 텍스트 노드에 저장되어 있고, 텍스트 노드에 접근하기 위해서는 요소 노드인 부모 노드를 거쳐야 한다. 텍스트 노드는 유일한 프로퍼티인 nodeValue
를 가지고 있고 nodevalue
를 이용하여 텍스트를 수정할 수 있다.
nodeValue
null
을 반환한다.nodeName
, nodeType
을 통해 노드의 정보를 얻을 수 있다.어트리뷰트 노드 조작할 때 주로 쓰이는 프로퍼티와 메서드는 다음과 같다.
className
class
어트리뷰트 값을 취득하거나 변경한다. className
프로퍼티에 값을 할당하는 경우에 class
어트리뷰트가 존재하지 않으면 동적으로 생성 후 할당한다. class
값이 여러개면 공백으로 구분하여 문자열을 반환하기 때문에 String
메서드인 split(' ')
을 사용해서 배열로 바꿔 사용한다.classList
add
, remove
, item
, toggle
, contains
, replace
메서드를 제공한다. id
id
어트리뷰트의 값을 취득하거나 변경한다. id
프로퍼티에 값을 할당할 떄, 존재하지 않으면 동적으로 생성하여 할당한다.hasAttribute(attribute)
setAttribute(attribute, value)
removeAttribute(attribute)
HTML
콘텐츠를 조작하기 위해서 아래 프로퍼티와 메서드를 사용할 수 있다. 하지만 마크업이 포함된 콘텐츠 추가는 XSS
공격에 취약하므로 주의해야 한다.
textContent
textContent
요소에 새로운 텍스트를 할당하는 방식으로 텍스트를 변경할 수 있다. 텍스트만 지정되어야 하고 마크업을 포함시키면 그것 또한 문자열로 인식된다.innerText
innerText
프로퍼티로 요소의 텍스트 컨텐츠에 접근할 수 있지만 비표준이고, CSS를 고려해야 하므로 textContent
프로퍼티보다 느리다.innerHTML
DOM을 조작하면 innerHTML
프로퍼티를 사용하지 않고도 새 콘텐츠를 추가할 수 있다.
createElement()
메서드로 새로운 요소 노드를 생성한다. createElement()
메소드의 인자로 태그 이름을 전달한다.createTextNode()
메서드를 사용해서 텍스트 노드를 생성한다.appendChild()
메서드를 사용해서 생성된 노드를 DOM tree에 추가한다. createElement(tagName)
createTextNode(text)
appendChild(Node)
removeChild(Node)
insertAdjacentHTML(position,string)
beforebegin
, afterbegin
, beforeend
, afterend
이다.innerHTML
DOM 조작방식
insertAdjacentHTML()
innerHTML
처럼 XSS 공격에 취약하다.