11. JavaScript - DOM
- 혼자서 JavaScript를 공부하고 실습하면서 작성한 글입니다.
- 처음 공부하고 있어서 부족하거나 잘못된 정보가 있을 수 있습니다. (2021.06.22 화)
- 조금 더 자세히 알게 되거나 수정할 부분이 있으면 바로바로 수정하겠습니다.
문서 객체 모델 (DOM)
-
(x)html 문서의 구조를 가리켜 문서 객체 모델(DOM : Document Object Model)이라고 한다.
-
(x)html 문서의 기본 구조는 최상위 객체로
<html>
이 있고 그 하위 객체로<head>
와<body>
가 있다. -
(x)html 각 태그마다 기능과 속성이 있다.
예를 들어
<img>
태그는 문서에 이미지를 출력하는 기능이 있고, 속성으로 src와 alt를 포함하고 있다. 이<img>
태그도 문서 객체라고 한다. -
이렇듯 (x)html 태그는 각각의 기능(Method)과 속성(properties)을 갖고 있는 문서 객체이다.
-
문서 객체 모델(DOM)을 배우는 주된 목적은 자바스크립트를 사용하여 문서 객체를 선택하고 속성 또는 스타일(css)을 적용하기 위해서 이다.
-
HTML 문서를 브라우저에서 로드 시 각 구성요소들을 객체화하여 객체 트리 구조를 나타냄
- 루트 노드 : 트리 구조에서 가장 위에 위치한 노드 / 부모 노드가 없음
- 부모 노드 : 트리 구조에서 상위에 위치하는 노드
- 자식 노드 : 트리 구조에서 하위에 위치하는 노드
- 형제 노드 : 같은 부모 노드를 가지는 노드
선택자
- (x)html에서 사용하는 스타일(css)과 js 내에서 사용하는 스타일은 모두 (x)html의 선택한 요소에 디자인 속성을 바꿀 때 사용한다.
- 자바스크립트를 이용해 특정 문서 객체를 선택하고, 여기에 속성(Atrribute)또는 스타일을 적용하기 위해서는 문서 객체의 선택자 사용법을 잘 알고 있어야 한다.
- 선택자에는 크게 직접 문서에서 요소를 선택해 오는 직접 선택자(id, class, 폼명(Form name), 요소명(Element Name) 선택자를 포함)가 있고, 이 선택자를 사용해 온 문서 객체를 기준으로 가까이에 있는 요소를 선택하는 인접 관계 선택자(parentNode, childNodes, firstChild, childeren, previousSibling, nextSibling 선택자를 포함)가 있다.
구분 | 종류 | 설명 |
---|---|---|
직접선택자 | document.getElementById("아이디명") | 아이디를 이용해 요소를 선택 |
document.getElementByTagName("요소(태그)명") | 요소의 이름을 이용해 요소를 선택 | |
document.formName.inputName | 폼 요소에 name 속성을 이용해 요소를 선택 | |
인접 관계 선택자 | parentNode | 선택한 요소의 부모 요소를 선택 |
childNodes | 선택한 요소의 모든 자식 요소를 선택. 선택한 모든 요소가 배열 객체로 저장됨 | |
children | 선택한 요소의 자식 요소인 태그만 선택. 선택한 모든 요소가 배열 객체로 배열 저장 | |
firstChild | 선택한 요소의 첫 번째 자식 요소만 선택 | |
previousSibling | 선택한 요소의 이전에 오는 형제 요소만 선택 | |
nextSibling | 선택한 요소의 다음에 오는 형제 요소만 선택 |
- 예시1 - 직접선택자(id)를 이용하여 요소 선택
<html>
<head>
<title>예시1</title>
<meta charset="utf-8">
</head>
<body>
<h1 id="selector">선택자</h1>
<script>
// id 값이 "selector"인 요소에 글자가 초록색으로 출력.
document.getElementById("selector").style.color="green"
</script>
</body>
</html>
- 예시2 - 직접선택자(id)를 이용하여 요소 선택2
<html>
<head>
<title>예시2</title>
<meta charset="utf-8">
<script>
// id 값이 “selector”인 요소에 글자가 초록색으로 출력됩니다.
window.onload=function( ){ document.getElementById("selector").style.color="green"
}
</script>
</head>
<body>
<h1 id="selector">선택자</h1>
</body>
</html>
- 예시3 - 직접선택자를 2번 이용하여 요소 선택
<!DOCTYPE html>
<html>
<head>
<title>예시3</title>
</head>
<body>
<div id="box">
<p>내용1</p>
<p>내용2</p>
<p>내용3</p>
</div>
<script>
//<div id=“box”>에 두 번째 <p>태그에 ‘내용2’가 빨간색으로 출력됩니다.
var obj = document.getElementById("box");
obj.getElementsByTagName("p")[1].style.color="#f00";
</script>
</body>
</html>
- 예시3-2 - 직접선택자, 인접관계선택자를 사용하여 요소 선택
<!DOCTYPE html>
<html>
<head>
<title>예시3-2</title>
</head>
<body>
<div id="box">
<p>내용1</p>
<p>내용2</p>
<p>내용3</p>
</div>
<script>
//<div id=“box”>에 두 번째 <p>태그에 ‘내용2’가 빨간색으로 출력됩니다.
var obj = document.getElementById("box");
obj.children[1].style.color="#f00";
</script>
</body>
</html>
인접 관계 선택자로 문서 객체에 스타일 적용하기
종류 | 의미 |
---|---|
요소 선택.속성명 | 요소의 지정한 속성값을 불러온다. |
요소 선택.속성명 = "새 값" | 요소의 지정한 속성값을 새 값으로 변경 또는 생성 |
요소 선택.getAttribute("속성") | 요소의 지정한 속성값을 불러온다. |
요소 선택.setAttribute("속성","새값") | 요소의 지정한 속성값을 새값으로 변경 또는 생성 |
- 예시1 - getAttribute("속성")을 이용하여 요소의 지정한 속성 값 불러오기
<!DOCTYPE html>
<html>
<head>
<title>예시1</title>
<style>
#box {width:300px; height:300px; border:1px solid #000;}
</style>
</head>
<body>
<div id="box" style = "background-color:yellow">
<p>내용1</p>
<p>내용2</p>
<p>내용3</p>
</div>
<script>
// background-color:yellow 가 화면에 출력된다.
document.write(document.getElementById("box").getAttribute("style"));
</script>
</body>
</html>
- 예시2 - setAttribute("속성", "새값")을 이용하여 지정한 속성 값 변경
<!DOCTYPE html>
<html>
<head>
<title>예시2</title>
<style>
#box {width:300px; height:300px; border:1px solid #000;}
</style>
</head>
<body>
<div id="box" style = "background-color:yellow">
<p>내용1</p>
<p>내용2</p>
<p>내용3</p>
</div>
<script>
// background-color:yellow 가 화면에 출력된다.
document.write(document.getElementById("box").getAttribute("style"));
// box의 배경색이 노랑색에서 빨간색으로 변함
document.getElementById("box").setAttribute("style", "background-color:red");
</script>
</body>
</html>
- 예시3
<!DOCTYPE html>
<html>
<head>
<title>예시3</title>
</head>
<body>
<h1>월요일</h1>
<h2>화요일</h2>
<p style="font-size:50px" id="txt">수요일</p>
<script>
document.body.style['backgroundColor']="gold";
document.body.style['fontSize']="50px";
document.body.style['color']="red";
document.write(document.getElementById('txt').getAttribute("style"));
</script>
</body>
</html>
DOM - 제어대상 선택
document.getElementsByTagName
은 인자로 전달된 태그명에 해당하는 객체들을 찾아서 그 리스트를NodeList
라는 유사 배열에 담아서 반환
<!DOCTYPE html>
<html>
<head>
<title>연습1</title>
</head>
<body>
<ul>
<li>사과</li>
<li>수박</li>
<li>멜론</li>
</ul>
<script>
var lis = document.getElementsByTagName('li');
for(var i=0; i<lis.length;i++){
lis[i].style.color="red";
}
</script>
</body>
</html>
document.getElementsByClassName
<!DOCTYPE html>
<html>
<head>
<title>연습2</title>
</head>
<body>
<ul>
<li>HTML</li>
<li class="active">CSS</li>
<li class="active">JavaScript</li>
</ul>
<script>
var lis = document.getElementsByClassName('active');
for(var i=0; i < lis.length; i++){
lis[i].style.color='red';
}
</script>
</body>
</html>
document.getElementById
<!DOCTYPE html>
<html>
<head>
<title>연습3</title>
</head>
<body>
<ul>
<li>HTML</li>
<li id="active">CSS</li>
<li>JavaScript</li>
</ul>
<script>
var li = document.getElementById('active');
li.style.color='red';
</script>
</body>
</html>
document.querySelector
- 지정한 요소 중 첫번째 요소만 선택
<!DOCTYPE html>
<html>
<head>
<title>연습4</title>
</head>
<body>
<ul>
<li>HTML</li> <!-- HTML만 빨간색 적용 -->
<li>CSS</li>
<li>JavaScript</li>
</ul>
<ol>
<li>HTML</li>
<li class="active">CSS</li> <!-- CSS만 파란색 적용 -->
<li class="active">JavaScript</li>
</ol>
<script>
var test1 = document.querySelector('li');
test1.style.color='red';
var test2 = document.querySelector('.active');
test2.style.color='blue';
</script>
</body>
</html>
document.querySelectorAll
<!DOCTYPE html>
<html>
<head>
<title>연습5</title>
</head>
<body>
<ul>
<li>HTML</li> <!-- 모든 li 태그에 파란색 적용 -->
<li>CSS</li>
<li>JavaScript</li>
</ul>
<ol>
<li>HTML</li>
<li class="active">CSS</li>
<li class="active">JavaScript</li>
</ol>
<script>
var lis = document.querySelectorAll('li');
for(var name in lis){
lis[name].style.color = 'blue';
}
</script>
</body>
</html>
document.createElement()
- 지정한 tagName
의 html 요소를 만들어 반환한다.
Syntax : let element = document.createElement(tagName[, options]);
document.createTextNode()
- 텍스트 노드를 생성
Syntax : var text = docuemnt.createTextNode("내용");
Node.appendChild()
- 한 노드를 특정 부모 노드의 자식 노드 리스트 중 마지막 자식으로 붙인다.
Syntax : 부모요소.appendChild(자식요소)
<!DOCTYPE html>
<html>
<body>
<p>버튼을 클릭하면 BUTTON 요소를 생성합니다.</p>
<button onclick="myFunction()">클릭</button>
<script>
function myFunction() {
var btn = document.createElement("BUTTON");
var t = document.createTextNode("안녕하세요");
btn.appendChild(t);
document.body.appendChild(btn);
}
</script>
</body>
</html>
Author And Source
이 문제에 관하여(11. JavaScript - DOM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hih0327/11.-JavaScript-DOM저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)