- JavaScript DOM(문서 객체 모델)
- DOM 구조
- DOM 요소 접근
- DOM 요소 추가
JavaScript DOM(문서 객체 모델:Document Object Model)
- 웹 문서의 모든 요소를 자바스크립트를 이용하여 조작할 수 있도록 객체를 사용하여 문서를 다루는 방법
- 기존에 만들어 두었던 paintBoard를 이용하여 예제 구성
- index.html을 켜서 개발자 도구에 들어가서 Element를 확인한다.
- 그럼 아래와 같이 코드를 확인할 수 있는데 개발자도구 console을 활용하여 값을 변경해볼 것이다.!
- 편의상 입력을 >로 표기하고, 출력은 <으로 표기한다.
- 콘솔에서 querySelector를 이용해 id를 불러와서 배경색을 바꿔주면 변경이 되는 것을 확인할 수 있다.
> document.querySelector("#jsMode").style.backgroundColor = 'pink'
< "pink"
- input부분을 화면에서 숨기고싶으면 style.visibility을 이용하여 숨겨준다.
> document.querySelector("input").style.visibility = 'hidden'
< "hidden"
- 웹문서를 직접 수정하지않고 자바스크립트를 이용하여 수정했다.
- 이것이 가능한 이유는 document를 사용하면 자바스크립트에서 웹문서의 소스를 전부 인식할 수 있기 때문.
- document는 수많은 DOM 요소 중 하나이다.
- 콘솔에 document를 입력하면 웹문서의 소스를 그대로 불러온다.
DOM구조
- DOM은 웹 문서의 요소를 부모요소, 자식요소로 구분한다.(트리구조)
<body> - 부모요소
<h1>title</h1> - 자식요소
<p>content</p> - 자식요소
</body>
- 위의 코드는 아래와 같이 그림으로 표현할 수 있다.
- DOM 트리는 웹문서의 HTML 요소만 표현하는것이 아니라, HTML요소가 품고있는 텍스트, 이미지도 자식으로 간주하여 DOM 트리에 표현한다.
[[정리]]
- 웹 문서의 태그는 요소(Element)노드로 표현
- 태그가 품고있는 텍스트는 해당 요소 노드의 자식노드인 텍스트노드(Text node)로 표현
- 태그의 속성은 모두 해당 요소 노드의 자식인 속성(Attribute) 노드로 표현
- 주석은 주석노드(Comment node)로 표현
DOM 요소 접근
- getElementByID()
- DOM 요소를 id선택자로 접근하는 함수
> document.getElementById("jsMode")
< <button id="jsMode">Fill</button>
- getElementsByClassName()
- DOM 요소를 class값으로 찾아내는 함수
- id 선택자와 다르게 웹 문서안에서 여러번 사용할 수 있음
- 2개 이상의 웹 요소에 접근
- 배열의 인덱스를 사용하여 원하는 요소를 가져올 수 있다.
- getElementByTagName()
- DOM 요소를 태그 이름으로 찾아내는 함숱
- 여기서 태그란 <h1>, <p>와 같은 것을 뜻한다.
- title 태그를 가져오는 예제
- querySeletor(), querySeletorAll()
- DOM 요소를 다양한 방법으로 찾아주는 함수
- id 값 앞에는 #을 붙이고, class 값 앞에는 .을 붙인다.
- 태그 값은 기호없이 태그이름만 사용하면 된다.
- querySeletor() 함수와 함께 class 선택자나 태그 이름을 사용할 때는 여러 요소 중 첫번째 요소에만 접근할 수 있다.
- querySeletor를 사용하게되면 HTMLCollection이 아니라 NodeList라고 표기되는데, 이것은 여러개의 노드를 모아놓은 것으로 배열과 비슷하다고 생각하면 된다.
자바스크립트에서 웹 요소정도만 변경한다면 getElementByID(), getElementsByClassName(), getElementByTagName()를 사용하고, 웹 요소 뿐만 아니라 텍스트나 속성 변경, 텍스트 추가의 경우에는 querySeletor(), querySeletorAll() 함수를 사용한다.
DOM에 새로운 요소 추가하기
- createElement() : 새 요소 노드를 만든다.
- createTextNode() : 텍스트 내용이 있을 경우, 텍스트 노드를 만든다.
- appendChild() : 텍스트 노드를 요소 노드에 자식 노드로 추가한다.
- createAttribute() : 요소에 속성이 있을 경우 속성 노드를 만든다.
- setAttributeNode() : 속성 노드를 요소 노드에 연결한다.
- appendChild() : 새로 만든 요소 노드를 부모 노드에 추가한다.
- h1 태그를 만들어 title 변수에 할당
- Painting Board라는 텍스트 노드를 만들어 newText 변수에 할당
- Painting Board 텍스트 노드를 h1 태그에 자식노드로 추가한 뒤, body에 추가한다.
- class를 만들어 makeClass 변수에 할당
- makeClass.value에 “jsClass” 값을 할당
- setAttributeNode를 이용하여 클래스를 title변수에 할당한다.