s04_Array.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Array</title>
<script type="text/javascript">
// 배열 생성
var array1 = new Array(); // 빈 배열
document.write(array1 + '<br>'); // 요소가 없으므로 빈 문자열 출력
document.write(array1.length + '<br>'); // 비어 있으므로 배열의 길이는 0
document.write('--------<br>');
var array2 = new Array(10); // 빈 요소가 10개 만들어짐; 배열의 길이 = 10
document.write(array2 + '<br>');
document.write(array2.length +'<br>');
document.write('--------<br>');
var array3 = new Array(52, 273, 103, 57, 32); // 인자를 2개 이상 입력하면 인자들을 요소로 갖는 배열이 만들어짐; 배열의 길이 = 5
document.write(array3 + '<br>');
document.write(array3.length);
</script>
</head>
<body>
</body>
</html>
s05_Array.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Array</title>
<script type="text/javascript">
// 배열 생성
var array1 = new Array();
// 요소 추가
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
// 출력
document.write(array1[0] + '<br>');
document.write(array1[1] + '<br>');
document.write(array1[2] + '<br>');
document.write('--------<br>');
// 반복문을 이용한 요소의 출력
for(var i=0;i<array1.length;i++) {
document.write('array1[' + i + ']:' + array1[i] + '<br>');
}
document.write('--------<br>');
// for in 반복문을 이용한 요소의 출력
for(var i in array1) {
document.write(array1[i] + '<br>');
}
</script>
</head>
<body>
</body>
</html>
length
toUpperCase()
toLowerCase()
charAt()
indexOf()
lastIndexOf()
substring()
substr()
split()
bold()
등)도 가지고 있지만, DOM에서 style로 처리하는 쪽이 확장성이 높아 String의 메서드는 잘 사용되지 않음s06_String.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String</title>
<script type="text/javascript">
var characters = prompt('사용할 비밀번호를 입력해주세요', '6글자 이상');
// 입력받은 값이 6글자 이상인지 체크
if(characters.length < 6) {
alert('6글자 이상으로 입력하세요!');
}
else {
alert('비밀번호가 설정되었습니다.');
}
</script>
</head>
<body>
</body>
</html>
s07_String.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String</title>
<script type="text/javascript">
function trans() { // 버튼을 눌러서 함수를 호출하면 입력창에 입력한 소문자 데이터를 읽어와서 대문자로 변환하고, 변환된 데이터를 다시 입력창에 저장
var txt = document.form1.id.value; // document로 전체 문서에 접근하고, 하위 요소인 <form>과 <input>에 name 속성(대소문자 구분)을 통해 접근 후, value 속성을 통해 입력창에 입력한 데이터를 반환
txt = txt.toUpperCase(); // toUpperCase() 메서드를 통해 소문자를 대문자로 변환
document.form1.id.value = txt; // 대문자로 변환된 데이터를 입력창에 저장
}
</script>
</head>
<body>
<form name="form1">
ID를 소문자로 입력하면 대문자로 변환됩니다.<br>
ID : <input type="text" name="id">
<input type="button" value="입력" onclick="trans();"> <!-- 서버로 전송하지 않고 자바스크립트를 호출할 것이므로 submit 대신 button 생성 -->
</form>
</body>
</html>
s08_String.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String의 메서드</title>
<script type="text/javascript">
var msg = '세상의 끝에서 세상을 노래하다';
document.write(msg.length + '<br>'); // 문자열의 길이
document.write(msg.charAt(8) + '<br>'); // 지정한 인덱스에 해당하는 위치의 문자 추출
document.write(msg.indexOf('상') + '<br>'); // 지정한 문자가 처음으로 등장하는 위치의 인덱스 반환
document.write(msg.indexOf('노래') + '<br>'); // 지정한 문자열의 첫 번째 문자가 처음으로 등장하는 위치의 인덱스 반환
document.write(msg.lastIndexOf('상') + '<br>'); // 지정한 문자가 마지막으로 등장하는 위치의 인덱스 반환
document.write(msg.substring(5) + '<br>'); // 지정한 인덱스부터 끝까지의 문자열 추출
document.write(msg.substr(5) + '<br>');
document.write(msg.substring(1,5) + '<br>'); // 시작 인덱스부터 끝 인덱스 전까지의 문자열 추출
var msg2 = '2021-12-23';
var array = msg2.split('-'); // 구분자를 이용해서 문자열을 잘라낸 후 배열로 반환
document.write(array);
</script>
</head>
<body>
</body>
</html>
ch11-DOM
생성하고 새 HTML 파일 s01_tagname.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>태그명을 이용해서 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() { // 브라우저가 <body>의 <span>까지 모두 인식한 다음에 스크립트를 실행하도록 지연시킴
var spans = document.getElementsByTagName('span'); // getElementsByTagName() 메서드는 태그명을 통해 태그를 탐색; 복수의 태그가 존재할 수 있기 때문에 NodeList로 반환
spans[0].innerHTML = '달빛이 찬란한 호수'; // innerHTML 속성을 이용해 시작 태그와 끝 태그 사이의 내용을 변경함
spans[1].innerHTML = '흰 눈이 눈부신 들판';
};
</script>
</head>
<body>
<span>하늘</span><br>
<span>하늘</span>
</body>
</html>
s02_tagname.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>태그명을 이용해서 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var spans = document.getElementsByTagName('span');
// 반복문을 이용한 문서 객체 호출
for(var i=0;i<spans.length;i++) {
if(i%2==1) { // 홀수 인덱스
spans[i].innerHTML = '우주';
}
else { // 짝수 인덱스
spans[i].innerHTML = '지구';
}
}
};
</script>
</head>
<body>
<span>하늘</span><br>
<span>하늘</span><br>
<span>하늘</span>
</body>
</html>
s03_id.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>id를 이용한 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var header1 = document.getElementById('header_1'); // getElementById() 메서드는 id 속성을 통해 태그를 탐색; id 속성은 문서 내에서 유일해야 하기 때문에 하나의 태그를 호출
var header2 = document.getElementById('header_2');
header1.innerHTML = '모카'; // innerHTML 속성을 이용해 호출된 문서 객체의 내용 변경
header2.innerHTML = '초코';
};
</script>
</head>
<body>
<h1 id="header_1">Header</h1>
<h1 id="header_2">Header</h1>
</body>
</html>
s04_name.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>name 속성을 이용한 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var prev = document.getElementsByName('prev'); // getElementsByName() 메서드는 name 속성을 통해 문서 객체를 탐색; name 속성은 중복될 수 있기 때문에 NodeList로 반환
var next = document.getElementsByName('next');
prev[0].innerHTML = '이전';
next[0].innerHTML = '다음';
var country = document.getElementsByName('country');
country[0].checked = true; // checked 속성의 값을 true로 지정; NodeList에서 첫 번째 체크박스의 기본값을 선택된 것으로 변경
var comment = document.getElementsByName('comment');
// comment[0].value = '간단한 설명 입력'; // value 속성에 값을 대입하면 입력 박스에 해당 값이 채워짐
comment[0].placeholder = '간단한 설명 입력'; // placeholder 속성에 값을 대입하면 입력 박스에 해당 값이 hint로 제공됨; value 속성과 함께 지정시 value 속성이 우선함
};
</script>
</head>
<body>
<button name="prev">prev</button><br>
<button name="next">next</button><br>
<input type="checkbox" name="country" value="한국">한국
<input type="checkbox" name="country" value="미국">미국
<input type="checkbox" name="country" value="영국">영국
<br><input type="text" name="comment">
</body>
</html>
s05_className.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>클래스명을 이용한 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var foo = document.getElementsByClassName('matched'); // getElementsByClassName() 메서드는 클래스명을 통해 문서 객체를 탐색; 클래스명은 중복될 수 있기 때문에 문서 객체의 정보를 NodeList로 반환
var output = '';
for(let i=0;i<foo.length;i++) {
output += foo[i].innerHTML + '\n'; // alert() 메서드로 생성되는 경고창은 HTML이 아니라 별도의 응용 프로그램이므로 <br>이 아닌 \n으로 줄바꿈
}
alert(output);
var fooMatch = document.getElementsByClassName('unmatched matched'); // 클래스명이 여러 개인 경우 공백을 구분자로 해서 하나의 문자열로 전달하면 해당 클래스명들을 모두 가지고 있는 요소들이 NodeList로 반환됨; 클래스명의 순서는 변경 가능
var output2 = '';
for(let i=0;i<fooMatch.length;i++) {
output2 += fooMatch[i].innerHTML + '\n';
}
alert(output2);
var foo2 = document.getElementById('foo'); // foo2에 id가 foo인 <p> 태그가 담김
var fooMatch2 = foo2.getElementsByClassName('matched'); // id가 foo인 <p> 태그에서 클래스명이 matched인 자식 태그들을 NodeList로 반환
var output3 = '';
for(let i=0;i<fooMatch2.length;i++) {
output3 += fooMatch2[i].innerHTML + '\n';
}
alert(output3);
};
</script>
</head>
<body>
<p id="foo">
<span class="matched">a</span>
<span class="matched unmatched">b</span>
<span class="unmatched">c</span>
</p>
<p id="bar">
<span class="matched">x</span>
</p>
</body>
</html>
s06_selector.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선택자를 이용한 태그 탐색</title>
<script type="text/javascript">
window.onload = function() {
var elem = document.querySelector('.strawberry'); // querySelector() 메서드는 선택자를 이용해서 태그를 탐색; 태그가 중복될 경우 첫 번째 태그만 호출
elem.style.color = 'crimson'; // style 속성을 이용해 호출한 태그의 글자 색을 변경함
};
</script>
</head>
<body>
<ul>
<li class="apple">Apple</li>
<li class="strawberry">Strawberry</li>
<li class="strawberry">Strawberry2</li>
<li class="orange">Orange</li>
</ul>
</body>
</html>
s07_selector.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선택자를 이용한 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var header1 = document.querySelector('#header_1'); // 선택자를 이용해서 문서 객체를 탐색
var header2 = document.querySelector('#header_2');
header1.innerHTML = 'Hello';
header2.innerHTML = 'World';
};
</script>
</head>
<body>
<h1 id="header_1">도시</h1>
<h1 id="header_2">도시</h1>
</body>
</html>
s08_selector.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선택자를 이용해서 문서 객체 탐색</title>
<script type="text/javascript">
window.onload = function() {
var elems = document.querySelectorAll('ul > li'); // querySelectorAll() 메서드는 선택자를 이용해서 태그를 탐색; 복수의 태그가 존재할 수 있으므로 태그 정보를 NodeList로 반환
var output = '';
for(var i=0;i<elems.length;i++) {
output += elems[i].innerHTML + '\n';
}
alert(output);
elems[0].style.background = 'gold';
};
</script>
</head>
<body>
<ul>
<li>Apple</li>
<li>Strawberry</li>
<li>Mango</li>
</ul>
</body>
</html>
s09_create.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>태그 생성</title>
<script type="text/javascript">
window.onload = function() {
var header = document.createElement('h1'); // <h1> 태그 생성
var textNode = document.createTextNode('Hello DOM'); // 텍스트 노드 생성
// 노드 연결
header.appendChild(textNode); // <h1> 태그에 텍스트 노드를 추가
document.body.appendChild(header); // <body> 태그에 <h1> 태그를 추가
};
</script>
</head>
<body>
</body>
</html>
Penguins.jpg
를 C:\javaWork\workspace_jsp\javaScript\src\main\webapp\images
로 이동s10_create.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>문서 객체 생성 및 속성 처리</title>
<script type="text/javascript">
window.onload = function() {
var image = document.createElement('img'); // <img> 태그 생성
// <img> 태그의 속성을 제어
image.src = '../images/Penguins.jpg';
image.width = 500;
image.height = 350;
// 노드를 연결
document.body.appendChild(image); // <body> 태그에 <img> 태그를 추가
};
</script>
</head>
<body>
</body>
</html>
s11_create.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>문서 객체 생성</title>
<script type="text/javascript">
window.onload = function() {
var output = '';
output += '<ul>';
output += ' <li>Java</li>';
output += ' <li>SQL</li>';
output += ' <li>HTML</li>';
output += ' <li>CSS</li>';
output += ' <li>JavaScript</li>';
output += '</ul>';
// innerHTML 속성을 이용해서 태그를 추가
// document.body.innerHTML = output;
// textContent 속성을 이용해서 텍스트를 추가
document.body.textContent = output;
};
</script>
</head>
<body>
</body>
</html>
s12_remove.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>문서 객체 제거</title>
<script type="text/javascript">
window.onload = function() {
var willBeRemoved = document.getElementById('will_be_removed');
// 3초 후에 함수 호출
setTimeout(function(){
// 지정한 문서 객체를 제거; 메서드를 호출한 문서 객체의 직계 자식만 제거 가능
// document.body.removeChild(willBeRemoved);
// 문서 객체의 하위 요소를 모두 제거
document.body.innerHTML = '';
}, 3000);
};
</script>
</head>
<body>
<h1 id="will_be_removed">Header</h1>
<h1>Header2</h1>
</body>
</html>
s13_style.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>문서 객체의 스타일 처리</title>
<script type="text/javascript">
window.onload = function() {
var header = document.getElementById('header');
// 스타일 처리
header.style.border = '2px solid midnightblue';
header.style.color = 'mintcream';
header.style.fontFamily = 'Helvetica'; // CSS의 속성명은 -를 인정하지만, JavaScript의 속성명은 -를 인정하지 않기 때문에 CSS의 속성명에서 -를 제거하고 - 다음에 오는 단어의 첫 글자를 대문자로 변경해서 사용함
header.style.background = 'steelblue'
}
</script>
</head>
<body>
<h1 id="header">Header</h1>
</body>
</html>
ch12-event
생성하고 새 HTML 파일 s01_inline.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>인라인 이벤트 처리</title>
</head>
<body>
<input type="button" value="이동" onclick="location.href='https://www.naver.com';"> <!-- <a> 태그 대신 버튼에 인라인 이벤트를 만들어 페이지를 이동하는 방식은 흔히 사용됨 -->
<input type="button" value="확인" onclick="alert('클릭');alert('click');"> <!-- 인라인 방식으로 자바스크립트 코드를 여러 줄 작성하는 것은 권장되지 않음 -->
</body>
</html>
s02_function.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>인라인 이벤트 처리 : 함수 이용</title>
<style type="text/css">
div {
background-color: orange; /* div 영역을 식별하기 위해 배경색 지정 */
}
</style>
<script type="text/javascript">
function whenClick() {
alert('CLICK');
}
</script>
</head>
<body>
<div id="header" onclick="whenClick();">클릭</div> <!-- div 영역 클릭시 경고창이 나타남 -->
</body>
</html>
s03_onclick.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onclick</title>
<script type="text/javascript">
function changeColor(color) {
// 배경색 변경
document.body.style.backgroundColor = color;
}
</script>
</head>
<body>
<input type="radio" name="color" value="blue" onclick="changeColor('powderblue');">파란색
<input type="radio" name="color" value="green" onclick="changeColor('darkseagreen');">초록색
<input type="radio" name="color" value="white" onclick="changeColor('white');">흰색
</body>
</html>
s04_onmouseover.html
생성<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onmouseover/onmouseout</title>
<style type="text/css">
a {
color: white;
text-decoration: none;
}
td {
width: 100px;
margin-top: 1px;
text-align: center;
background-color: #FF8888;
}
</style>
<script type="text/javascript">
function changeBgColor(cell, newColor) { // cell: 이벤트가 발생한 <td>; newColor: 변경할 색
cell.style.backgroundColor = newColor;
}
</script>
</head>
<body>
<table>
<tr>
<td onmouseover="changeBgColor(this, '#FF0000');" onmouseout="changeBgColor(this, '#FF8888');"> <!-- this : 이벤트가 발생한 태그 -->
<a href="#">menu01</a>
</td>
</tr>
<tr>
<td onmouseover="changeBgColor(this, '#FF0000');" onmouseout="changeBgColor(this, '#FF8888');">
<a href="#">menu02</a>
</td>
</tr>
<tr>
<td onmouseover="changeBgColor(this, '#FF0000');" onmouseout="changeBgColor(this, '#FF8888');">
<a href="#">menu03</a>
</td>
</tr>
</table>
</body>
</html>