본문 바로가기
[ Script ]/JAVA Script

[ JAVA Script ] DOM

by 환이s 2023. 2. 24.

오늘은 DOM(문서 객체 모델)의 개념과 document 객체에 대한 포스팅을 해보겠습니다!

 

 

■  DOM(문서 객체 모델)이란?

 

문서 객체 모델(DOM, Document Object Model)은 HTML 문서나 XML에 접근하기 위한 일정의 인터페이스입니다.

 

이 객체 모델은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공합니다. DOM의 특징은 다음과 같습니다.

 

  • HTML5와 같은 구조화된 문서를 객체 개념으로 표현하고 접근하는 방식입니다.
  • W3C가 정한 공식 표준으로 W3C가 표준화한 여러 API의 기반입니다.
  • DOM API를 통해 HTML5와 XML문서 안의 구성 요소 즉, 엘리먼트, 속성, 텍스트 등을 접근하고 변경할 수 있고, 문서의 내용이나 구조, 스타일 등을 동적으로 제어가 가능합니다.
  • 플랫폼과 언어에 중립적이며 동적으로 문서의 내용, 구조, 스타일을 접근하고 변경하는 중요한 수단입니다.

 

좀 더 깊게 개념에 대해서 알아보자면, 

웹 페이지는 일종의 문서(document)입니다. 이 문서는 웹 브라우저를 통해 그 내용이 해석되어 웹 브라우저 화면에 나타나거나 HTML 소스 자체로 나타나기도 합니다.

 

동일한 문서를 사용하여 이처럼 다른 형태로 나타날 수 있다는 점에 주목할 필요가 있습니다. DOM은 동일한 문서를 표현하고, 저장하고, 조작하는 방법을 제공합니다. 

 

또한 DOM은 웹 페이지의 객체 지향 표현이며, JAVA Script와 같은 스크립팅 언어를 이용한 DOM을 수정할 수 있습니다.

 

그럼 DOM에 대해서 하나씩 알아봅시다.

 

■  DOM Tree

 

먼저 HTML을 지탱하는 것은 태그(Tag)입니다.

문서 객체 모델(DOM)에 따르면, 모든 HTML 태그는 객체입니다. 태그 하나가 감싸고 있는 "자식"태그는 중첩 태그(nested tag)라고 부릅니다. 태그 내의 문자(text) 역시 객체입니다. 

 

 

정리하자면

 

  • HTML5이나 XML 문서의 구성 요소들은 계층적인 상호 관계를 갖고 구성합니다.

- DOM 모델에서 각 객체(HTML 문서의 구성 요소)들은 자연스럽게 계층적인 트리 구조로 표현합니다.

 

  • 노드 트리(Node tree)

- 3가지 노드 유형으로 표현합니다.

 

1. 엘리먼트 노드

  • 태그와 내용으로 표현되는 엘리먼트를 표현하는 노드입니다.
  • 하위에 또 다른 엘리먼트를 포함합니다.

 

2. 속성 노드

  • 엘리먼트의 시작 태그 안에 포함되는 속성 이름과 속성 값을 쌍으로 갖는 노드입니다.

 

3. 텍스트 노드

  • 엘리먼트가 갖는 실제 내용을 의미하는 노드입니다.
  • DOM 트리에서 최하위 단말 노드가 해당합니다.

 

저도 개념을 공부하면서 이해하는데 시간이 걸렸습니다. 그래서 제 생각을 그대로 정리해서 적어보자면 DOM은 HTML을 태그 트리 구조로 표현합니다.

 

위 요소를 바탕으로 DOM 트리 구조를 좀 더 쉽게 이해하기 위해 설명하자면, 위 요소들은 자식들을 보거나 숨길 수 있습니다. 즉, 트리에 있는 노드는 모두 객체입니다. 

 

JAVA Script를 공부하면서 많은 지식이 있다면 당연히 좋습니다. 하지만 시간이 부족하신 분이거나 JAVA Script를 주로 사용하지 않는 분들이라면 이 정도만 알고 넘어가도 괜찮다고 생각합니다.  간단하게 아래에 정리해 보겠습니다.

 

  • id로 요소 찾기 : getElementById("태그의 id")
  • 태그. innerHTML : 태그 내부의 내용
  • 태그. value : 태그의 입력값
  • 태그의 속성 변경 : 태그. src = "값"
document.getElementById("img2").src = "poodle.png";
  • 태그의 스타일 변경 : 태그. style. 속성이름 = "속성값";
document.getElementById("img2").style.color = "blue";

 

그럼 예제 코드를 통해서 DOM Tree 구조에 대해 알아보기 위해 <body> 태그를 활용해서 버튼 클릭 시 배경이 바뀌는 웹을 만들어 보겠습니다.

 

<예제 1>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onclick2</title>
<script type="text/javascript">
function change(img) {
	document.body.style.backgroundImage = "url('"+img+"')"
}

</script>
<style type="text/css">
body {
	background-image: url("../im/bg4.jpg");
}
</style>
</head>
<body>
<h2>배경 이미지 바꾸기</h2>
<input type="button" value="배경1" onclick="change('../im/bg3.jpg')">
<input type="button" value="배경2" onclick="change('../im/bg4.jpg')">
</body>
</html>

 

■  Document 객체

우리는 지금까지 포스팅을 보면서 document 객체를 자주 접했습니다.

 

document 객체는 웹 페이지 그 자체를 의미합니다.

웹 페이지에 존재하는 HTML요소에 접근하고자 할 때는 반드시 document객체부터 시작해야 합니다.

 

document 객체의 메서드는 다음 표를 참고해 봅시다.

 

메서드 설 명
document.getElementsByTagName(Tag Name) 태그 이름의 요소를 모두 선택합니다.
document.getElementsById(ID) 해당 아이디의 요소를 선택합니다.
document.getElementsByClassName(Class Name) 클래스에 속한 요소를 모두 선택합니다.
document.getElementsByName(Name 속성값) 해당 Name 속성값을 가지는 요소를 모두 선택합니다.
document.querySelectorAll(Selector) 선택자로 선택되는 요소를 모두 선택합니다.
document.createElement(HTML요소) 지정된 HTML 요소를 생성합니다.
document.write(Text) HTML 출력 스트림을 통해 Text를 출력합니다.

 

그럼 연습 문제로 document 객체를 활용해서 간단한 회원가입 창을 만들어 봅시다.

 

<예제 2>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>form_exp</title>
<script type="text/javascript">
function check() {
	//아이디 체크
	var userid = document.getElementById("userid");
	if (userid.value == "") {
		alert("아이디는 필수 입력입니다.");
		userid.focus();
		return;
	}
	//비밀번호 체크
	var pwd1 = document.getElementById("pwd1");
	var pwd2 = document.getElementById("pwd2");
	if (pwd1.value== "") {
		alert("비밀번호는 필수 입력입니다.");
		pwd1.focus();
		return;
	}
	if (pwd1.value != pwd2.value) {
		alert("비밀번호 불일치");
		pwd2.focus();
		return;
	}
	//이름 체크
	var name = document.getElementById("name");
	if (name.value == "") {
		alert("이름은 필수 입력입니다.");
		name.focus();
		return;
	}
	alert("정상적으로 입력되었습니다.");
}

</script>
</head>
<body>
<form >
<fieldset>
<legend>회원 가입</legend>
아이디 : <input type="text" id="userid"> <br>
비밀번호 : <input type="password"  id ="pwd1"> <br>
비밀번호확인 : <input type="password" id="pwd2"> <br>
이름 : <input type="text" id="name"><br>
이메일 : <input type="text" id="email" placeholder="avc@abc.com"><br>
전화번호 : <input id="phone"> <br>
<hr>
<input type="button" onclick="check()" value="확인">
</fieldset>

</form>

</body>
</html>

 

이번에는 document.write() 메서드를 활용해서 사원 정보를 출력해 봅시다. 

write() 메서드는 Text를 출력합니다.

 

<예제 3>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>myObject2</title>
<script type="text/javascript">
var emp ={
	deptno:123,
	name:"김길동",
	id : "kim",
	email : "kim@gmail.com",
	hp : "010-1234-5678"
};
document.write("-----------원데이터-----------","<br>");
document.write("사번 : ",emp.deptno,"<br>");
document.write("이름 : ",emp.name,"<br>");
document.write("ID : ",emp.id,"<br>");
document.write("이메일 : ",emp.email,"<br>");
document.write("HP : ",emp.hp,"<br>");


document.write("<br>");
emp.email="kim2@daum.com";
emp.hp= "010-7777-8888";

document.write("-----------변경데이터-----------","<br>");
document.write("사번 : ",emp.deptno,"<br>");
document.write("이름 : ",emp.name,"<br>");
document.write("ID : ",emp.id,"<br>");
document.write("이메일 : ",emp.email,"<br>");
document.write("HP : ",emp.hp,"<br>");


</script>
</head>
<body>

</body>
</html>

 

 

 


마치며

 

오늘은 DOM에 대해서 알아봤습니다.

비전공자로 시작해서 지금까지 준비하면서 정말 많은 재미를 느끼네요.

다음 포스팅에서 뵙겠습니다.

728x90

'[ Script ] > JAVA Script' 카테고리의 다른 글

[ JAVA Script ] Mobile Web UI구현  (0) 2023.02.28
[ JAVA Script ] Ajax  (0) 2023.02.27
[ JAVA Script ] jQuery  (0) 2023.02.25
[ JAVA Script ] 함수  (2) 2023.02.23
[ JAVA Script ] 기초 문법  (0) 2023.02.22