* 문서 객체 모델(DOM : Document Object Model)

- 웹 브라우저가 HTML 페이지를 인식하는 방식(document 객체와 관련된 객체의 집합)




1. 문서 객체 모델과 관련된 용어 정리

- 태그(Tag) : HTML 페이지에 존재하는 태그

- 문서 객체(DOM) : 태그를 자바스크립트에서 이용할 수 있는 객체

- 노드(Node) : HTML 페이지의 각 요소(html, head, body . . . 등)

- 요소 노드(Element Node) : HTML 태그

- 텍스트 노드(Text Node) : 요소 노드 안에 있는 글자

- 정적 문서 객체 생성 : HTML 페이지에 적혀 있는 태그들을 읽으며 생성하는 것

- 동적 문서 객체 생성 : JavaScript로 원래 HTML 페이지에는 없던 문서 객체를 생성하는 것




2. 텍스트 노드를 갖는 문서 객체 생성


<!-- document.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document</title>
<script type="text/javascript">
	window.onload = function() {
		// createElement(tagName) : 요소 노드 생성
		// createTextNode(text) : 텍스트 노드 생성
		var header = document.createElement('h1');
		var textNode = document.createTextNode('Hello DOM');
		
		// appendChild(node) : 객체에 노드를 연결
		header.appendChild(textNode);
		document.body.appendChild(header);
	};
</script>
</head>
<body>
</body>
</html>




3. 텍스트 노드를 갖지 않는 문서 객체 생성


<!-- document2.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document2</title>
<script type="text/javascript">
	window.onload = function() {
		// createElement(tagName) : 요소 노드 생성
		var img = document.createElement('img');
		
		// setAttribute(name, value) : 객체의 속성을 지정
		// getAttribute(name, value) : 객체의 속성을 가져옴
		img.setAttribute('src', 'test.png');
		img.setAttribute('width', 600);
		img.setAttribute('height', 500	);
			
		// appendChild(node) : 객체에 노드를 연결
		document.body.appendChild(img);
	};
</script>
</head>
<body>
</body>
</html>




4. innerHTML 속성 사용 문서 객체 생성


<!-- document3.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document3</title>
<script type="text/javascript">
	window.onload = function() {
		var output = '';
		output += '<ul>';
		output += '	<li>JavaScript</li>';
		output += '	<li>jQuery</li>';
		output += '	<li>Ajax</li>';
		output += '</ul>';
		
		// innerHTML 속성에 문자열을 할당
		document.body.innerHTML = output;
		
		// innerHTML 속성에 복합 대입 연산자로 문자열을 추가
		document.body.innerHTML += '<h1>Document Object Model</h1>';
	};
</script>
</head>
<body>
</body>
</html>




5. textContent 속성 사용 문서 객체 생성

- HTML 태그를 그대로 화면에 출력하고 싶을 경우 사용


<!-- document4.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document4</title>
<script type="text/javascript">
	window.onload = function() {
		var output = '';
		output += '<ul>';
		output += '	<li>JavaScript</li>';
		output += '	<li>jQuery</li>';
		output += '	<li>Ajax</li>';
		output += '</ul>';
		
		// textContent 속성으로 HTML 태그를 그대로 화면에  출력
		document.body.textContent = output;
		document.body.textContent += '<h1>Document Object Model</h1>';
	};
</script>
</head>
<body>
</body>
</html>




6. 문서 객체 가져오기 - getElementById()


<!-- document5.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document5</title>
<script type="text/javascript">
	window.onload = function() {
		// getElementById(id) : 태그의 id 속성이 id와 일치하는 문서 객체를 가져옴
		var header1 = document.getElementById('header1');
		var header2 = document.getElementById('header2');
		
		header1.innerHTML = 'getElementById(header1)';
		header2.innerHTML = 'getElementById(header2)';
	};
</script>
</head>
<body>
	<h1 id="header1">Header</h1>
	<h2 id="header2">Header</h2>
</body>
</html>




7. 문서 객체 가져오기 - getElementsByName(), getElementsByTagName()

- 단순 for 반복문을 사용


<!-- document6.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document6</title>
<script type="text/javascript">
	window.onload = function() {
		// getElementsByName(name) : 태그의 name 속성이 name과 일치하는 문서 객체를 배열로 가져옴
		// getElementsByTagName(tagName) : tagName과 일치하는 문서 객체를 배열로 가져옴
		var headers = document.getElementsByTagName('h1');
		for (var i = 0; i < headers.length; i++) {
			headers[i].innerHTML = 'getElementsByTagName(' + i + ')';
		}
	};
</script>
</head>
<body>
	<h1>Header</h1>
	<h1>Header</h1>
</body>
</html>




8. 문서 객체 가져오기 - querySelector(), queraySelectorAll()

- HTML5에서 추가된 메서드 CSS 선택자로 문서 객체를 선택


<!-- document7.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document7</title>
<script type="text/javascript">
	window.onload = function() {
		// querySelector(선택자) : 선택자로 가장 처음 선택되는 문서 객체를 가져옴
		// querySelectorAll(선택자) : 선택자로 선택되는 문서 객체를 배열로 가져옴
		var header1 = document.querySelector('#header1');
		var header2 = document.querySelector('.header2');
		
		header1.innerHTML = 'querySelector(#header1)';
		header2.innerHTML = 'querySelector(.header2)';
	};
</script>
</head>
<body>
	<h1 id="header1">Header</h1>
	<h2 class="header2">Header</h2>
</body>
</html>




9. 문서 객체 스타일 조작

- 문서 객체의 style 속성을 사용하여 스타일 변경 가능


<!-- document8.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document8</title>
<script type="text/javascript">
	window.onload = function() {
		var header = document.getElementById('header');
		
		header.style.color = '#4B58E3';
		header.style.fontFamily = 'Verdana';
	};
</script>
</head>
<body>
	<h1 id="header">Header CSS</h1>
</body>
</html>




10. 문서 객체 제거


<!-- document9.html --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>document9</title> <script type="text/javascript"> window.onload = function() { var header = document.getElementById('header'); // removeChild(child) : 문 서 객체의 자식 노드를 제거 document.body.removeChild(header); // 일반적으로 문서 객체를 제거할 때는 부모 노드로 이동해서 부모 노드에서 자식 노드를 삭제해야 함 }; </script> </head> <body> <h1 id="header">Header CSS</h1> </body> </html>


+ Recent posts