Frontend/Javascript
문서 객체 모델 (Document Object Model)
olli2
2021. 12. 10. 15:46
문서 객체 모델 (Document Object Model)
- 객체 지향 모델로서 구조화된 문서를 표현하는 형식
- HTML 문서에 접근하기 위한 표준 모델
- 표준은 대부분의 브라우저에서 DOM을 구현하는 기준
- 문서 내의 모든 요소를 정의하고, 각 요소에 접근하는 방법을 제공
- 웹 브라우저에서 보여지는 HTML 문서 태그 요소에 대한 정보와 문서에 대한 여러 가지 속성을 제공
- document 객체의 하위 객체를 이용하여 문서 내에서 일어나는 다양한 기능 제어
DOM 사용 시기
- HTML 문서가 로드되고 나서 파싱 작업을 거쳐 DOM 트리 생성
- DOM 문서가 로드될 때 모든 DOM을 사용할 수 있게 되는 때임
- 문서 내의 요소(태그) 제어 메소드를 사용하여 요소를 선택할 때 자바스크립트 위치 주의
- 문서 내에서 요소(객체)들이 생성되기 전에 자바스크립트를 선언하게 되면 요소를 선택할 수 없음
문서 내의 요소 (태그) 제어 메소드
메소드 | 설명 |
createElement(‘태그명’) | 요소 노드 생성 |
createTextNode(“출력할 문자열”) | 텍스트 노드 생성 |
appendChild(노드) | 객체에 노드 연결 (부착) |
setAttribute(name, value) | 객체 속성 설정 |
getAttribute(name) | 객체의 속성 반환 |
getElementById(id) | 태그의 id 속성이 id와 일치하는 문서 객체 반환 |
getElementsByName(name) | 태그의 name 속성이 name와 일치하는 문서 객체 반환 |
getElementsByTagName(태그명) | 태그명과 일치하는 문서 객체를 배열로 반환 |
removeChild(child) | 문서 객체의 자식 노드 제거 |
querySelector(선택자) | 1개의 선택자 선택 동일한 요소가 여러 개인 경우 첫 번째 요소만 선택 |
querySelectorAll(선택자) | 동일한 요소가 여러 개인 경우 모든 요소 선택 |
잘못된 사용 예제 : 문서 내에서 요소(객체)들이 생성되기 전 자바스크립트를 사용
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
var box = document.getElementById('box');
box.innerHTML = "변경";
</script>
</head>
<body>
<div id="box">box</div>
</body>
</html>
올바른 사용 예제 - 1 : 요소 생성 후 자바스크립트 사용
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
</head>
<body>
<div id="box">box</div>
<script type="text/javascript">
var box = document.getElementById('box');
box.innerHTML = "변경";
</script>
</body>
</html>
올바른 사용 예제 - 2 : 윈도우 로드 이벤트 확인 후에 자바스크립트 코드로 처리
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
window.onload = function(){
var box = document.getElementById('box');
box.innerHTML = "변경";
};
</script>
</head>
<body>
<div id="box">box</div>
</body>
</html>
예제 : createElement() - 1
<h3> 태그 생성 -> 문자열 (text) 생성 -> text를 h3에 연결 -> h3를 body에 연결 (문서에 출력)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
window.onload = function() {
// 1. 요소 생성
// <h3> 태그 생성하여 객체 참조 변수에 저장
var h3 = document.createElement('h3');
// text 노드 생성
var text = document.createTextNode("출력할 텍스트");
// 2. 문서에 출력
// 텍스트를 변수 h3에 연결
h3.appendChild(text);
// h3을 body에 연결 (부착)
document.body.appendChild(h3);
}
</script>
</head>
<body>
</body>
</html>
예제 : createElement() - 2
<img> 생성 -> 속성 설정 -> 문서에 출력 (body에 연결)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
window.onload = function() {
// 1. 요소 노드 생성
// <img> 태그 생성
var img = document.createElement('img');
// 속성 설정
img.src = "image/bird.jpg";
img.width=250;
img.height=180;
img.titile="예쁜새";
// 2. 문서에 출력
document.body.appendChild(img);
};
</script>
</head>
<body>
</body>
</html>
예제 : getElementById() - 1
id가 ‘header’인 태그를 찾아서 텍스트 변경
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function change() {
// 태그의 id 속성의 값이 'header'인 문서 객체 반환
var header = document.getElementById('header');
// 요소의 텍스트 내용 변경
header.innerHTML = "변경된 제목";
}
</script>
</head>
<body>
<h1 id="header">제목</h1>
<button id="btn" onClick="change()">제목 변경</button>
</body>
</html>
예제 : getElementById() - 2
- [변경] 버튼 누르면 다음과 같이 변경
- 이미지 : B.png
- 텍스트 : 새로운 이미지로 변경되었습니다
- 버튼 텍스트 : 완료
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<style>
div { margin:0 auto; width:60%; text-align:center; }
</style>
<script type="text/javascript">
function change() {
var img = document.getElementById("imageA");
img.src="image/B.png";
var hint = document.getElementById("hint");
hint.innerHTML = "새로운 이미지로 변경되었습니다.";
hint.style.background = "lightgreen";
var btn = document.getElementById("changeButton");
btn.innerHTML = "완료";
}
</script>
</head>
<body>
<div>
<img id="imageA" src="image/A.png">
<div id="hint">[변경] 버튼을 누르면 이미지가 변경됩니다.</div><br><br>
<button id="changeButton" onClick="change()">변경</button>
</div>
</body>
</html>
예제 : querySelector()
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
window.onload = function() {
var header = document.querySelector('h1');
header.style.color = "orange";
header.style.background = "gray";
header.innerHTML = "javascript";
};
</script>
</head>
<body>
<h1>Header</h1>
<h1>Header</h1>
<h1>Header</h1>
</body>
</html>
예제 : querySelectorAll()
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
window.onload = function() {
var headers = document.querySelector('h1'); // 배열로 생성됨
for (var i=0; i<headers.length; i++) {
var header = headers[i];
header.style.color = "orange";
header.style.background = "gray";
header.innerHTML = "javascript";
}
};
</script>
</head>
<body>
<h1>Header</h1>
<h1>Header</h1>
<h1>Header</h1>
</body>
</html>
예제 : getElementsByTagName(태그명)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<style>
div {margin:0 auto; width:600px; text-align:center;}
table {margin:0 auto; width:100%; height:100px;}
td {width:50px; height:30px;}
</style>
<script type="text/javascript">
window.onload = function() {
// 모든 td 요소 다 가져오기
var tdArr = document.getElementsByTagName('td');
var setNumberBtn = document.getElementById('setNumberBtn');
var setColorBtn = document.getElementById('setColorBtn');
var clearNumberBtn = document.getElementById('clearNumberBtn');
var clearColorBtn = document.getElementById('clearColorBtn');
// 셀에 번호 채우기
setNumberBtn.onclick = function() {
for (var i=0; i<tdArr.length; i++) {
tdArr[i].innerHTML = i;
}
};
// 셀에 7가지 색상 채우기
setColorBtn.onclick = function() {
var colors = ["red", "orange", "yellow", "green", "blue", "pink", "gray"];
for (var i=0; i<tdArr.length; i++) {
tdArr[i].style.background = colors[i];
}
};
// 셀의 번호 지우기
clearNumberBtn.onclick = function() {
for (var i=0; i<tdArr.length; i++) {
tdArr[i].innerHTML = "";
}
};
// 셀의 색상 지우기
clearColorBtn.onclick = function() {
for (var i=0; i<tdArr.length; i++) {
tdArr[i].style.background = "none"; //또는 ""
}
};
};
</script>
</head>
<body>
<div>
<table border="1">
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<br><br>
<button id="setNumberBtn">셀에 번호 채우기</button>
<button id="setColorBtn">셀에 색상 채우기</button>
<br><br>
<button id="clearNumberBtn">셀에 번호 지우기</button>
<button id="clearColorBtn">셀에 색상 지우기</button>
</div>
</body>
</html>