본 수업은 폐지 예정입니다. 자바스크립트 언어 수업과 웹브라우저 자바스크립트로 수업이 리뉴얼 되었기 때문에 이것을 이용해주세요.
Dom - (document object model)
- 자바스크립트는 Dom을 통해서 HTML을 제어한다.
- 문서에 프로그래밍적으로 엑세스하고 변형하기 위한 프로그래밍 인터페이스.
- Dom처리의 일반적인 순서
- 제어할 대상을 찾는다. - getElementById(), getElementsByName(), getElementsByTagName()
- 대상이 가지고 있는 메소드를 실행하거나, 이벤트 핸들러를 설치한다.
Dom Object
- DOM Document - 문서를 제어하기 위한 API
- DOM Events - 엘리먼트가 공통적으로 가지고 있는 이벤트
- DOM Elements - 엘리먼트가 공통적으로 가지고 있는 API
다음 객체들은 위의 Dom Events, Elements 의 API 외에 엘리먼트의 특성에 따라 추가되는 API 리스트임
- DOM Anchor
- DOM Area
- DOM Base
- DOM Body
- DOM Button
- DOM Form
- DOM Frame/IFrame
- DOM Frameset
- DOM Image
- DOM Input Button
- DOM Input Checkbox
- DOM Input File
- DOM Input Hidden
- DOM Input Password
- DOM Input Radio
- DOM Input Reset
- DOM Input Submit
- DOM Input Text
- DOM Link
- DOM Meta
- DOM Object
- DOM Option
- DOM Select
- DOM Style
- DOM Table
- DOM TableCell
- DOM TableRow
- DOM Textarea
주요한 엘리먼트 메소드
제어 할 대상을 탐색
엘리먼트를 생성
- document.createElement
- document.createTextNode
엘리먼트를 제어
- element.appendChild
- element.setAttribute
- element.getAttribute
- element.innerHTML
예제
example1.html (jsfiddle, github)
- document.getElementById 를 이용해서 엘리먼트를 선택
- 특수한 엘리먼트(DOM input text)의 속성(value)에 접근해서 값을 가져옴
- 가져온 값을 div의 내용으로 추가
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<script type="text/javascript">
function sync() {
// title 엘리먼트를 찾는다.
var title = document.getElementById('title');
// output 엘리먼트를 찾는다.
var output = document.getElementById('output');
// output 엘리먼트안에 title의 값을 삽입한다.
output.innerHTML = title.value;
}
</script>
</head>
<body>
<div style="background-color: gray;" id="output">
output
</div>
<input type="text" value="egoing" id="title" onchange="sync()">
<script>
sync();
</script>
</body>
</html>
example2.html (jsfiddle, github)
- document.getElementsByTagName을 이용해서 엘리먼트를 선택
- 이 때 리턴 값은 여러개이기 때문에 배열(array)에 담겨짐
- 엘리먼트의 class를 동적으로 변경해서 미리정의된 스타일시트의 설정을 동적으로 적용
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<style type="text/css">
.red {
background-color: red;
}
.blue {
background-color: blue;
}
.green {
background-color: green;
}
</style>
</head>
<body>
<div>
red
</div>
<div>
blue
</div>
<div>
green
</div>
<input type="button" value="color" onclick="colorize()" />
<script type="text/javascript">
function colorize() {
var divs = document.getElementsByTagName('div');
for(var i = 0; i < divs.length; i++) {
divs[i].setAttribute('class', divs[i].innerHTML)
}
}
</script>
</body>
</html>
example3.html (jsfiddle, github)
<html>
<style type="text/css">
.hide{display:none}
#menu{
padding-left:0;
}
#menu li{
float:left;
margin-left:20px;
}
#canvas{
clear:both;
}
</style>
<body>
<ul id="menu">
<li><a id="gogh" href="#tab1">고흐</a></li>
<li><a id="gaudi" href="#tab2">가우디</a></li>
<li><a id="albrecht" href="#tab3">알브레히트 뒤러</a></li>
</ul>
<div id="canvas">
<div id="gogh_img">
<img src="http://farm3.static.flickr.com/2435/3687464186_5ca34c866c.jpg" />
</div>
<div class="hide" id="gaudi_img">
<img src="http://farm2.static.flickr.com/1027/5184060937_679f620225.jpg" />
</div>
<div class="hide" id="albrecht_img">
<img src="http://farm5.static.flickr.com/4084/4979876994_5bce879910.jpg" />
</div>
</div>
<script type="text/javascript">
function addEvent(el, eType, fn, uC) {
if (el.addEventListener) {
el.addEventListener(eType, fn, uC);
return true;
} else if (el.attachEvent) {
return el.attachEvent('on' + eType, fn);
} else {
el['on' + eType] = fn;
}
}
function clickHandler(e){
var id = e.target.id;
var t = document.getElementById(e.target.id+'_img');
var p = document.getElementById('canvas');
for(var i = 0 ; i < p.childNodes.length ; i ++){
var c = p.childNodes[i];
if(c.nodeName == 'DIV'){
c.setAttribute('class', 'hide');
}
}
t.setAttribute('class', '');
}
addEvent(document.getElementById('gogh'), 'click', clickHandler)
addEvent(document.getElementById('gaudi'), 'click', clickHandler)
addEvent(document.getElementById('albrecht'), 'click', clickHandler)
</script>
</body>
</html>
example4.html (jsfiddle, github, 예제출처)
<html>
<head>
<title>||Working with elements||</title>
</head>
<script type="text/javascript">
var my_div = null;
var newDiv = null;
function addElement() {
// create a new div element
// and give it some content
newDiv = document.createElement("div");
newContent = document.createTextNode("Hi there and greetings!");
newDiv.appendChild(newContent);
//add the text node to the newly created div.
// add the newly created element and it's content into the DOM
my_div = document.getElementById("org_div1");
document.body.insertBefore(newDiv, my_div);
}
</script>
<body onload="addElement()">
<div id='org_div1'>
The text above has been created dynamically.
</div>
</body>
</html>
DOM을 이용한 예제들
http://www.w3schools.com/htmldom/dom_examples.asp

