일자 : 10주차 1차시

HTML DOM을 사용하면 JavaScript로 HTML 문서의 모든 요소를 접근하고 변경할 수 있다.
<!-- 버튼을 클릭했을 때 id가 'id1'인 요소의 색상을 빨간색으로 변경하는 코드 -->
<button type="button" onclick="document.getElementById('id1').style.color = 'red'">
Click Me!
</button>
document 객체는 웹 페이지를 나타낸다.document 객체에 접근하는 것부터 시작한다.document 객체를 사용하여 HTML 요소에 접근하고 조작하는 몇 가지 예이다.| 메서드 | 설명 |
|---|---|
document.getElementById(id) | 요소의 ID를 이용해 요소를 찾는다 |
document.getElementsByTagName(name) | 태그 이름을 이용해 요소를 찾는다 |
document.getElementsByClassName(name) | 클래스 이름을 이용해 요소를 찾는다 |
getElementById: 특정 ID를 가진 HTML 요소를 찾고 내용을 조작하는 역할을 한다.
<!-- "intro"라는 ID를 가진 요소의 내용을 가져와 "demo" ID를 가진 요소에 출력하는 코드 -->
<script>
const element = document.getElementById("intro"); // ID가 'intro'인 요소를 가져옴
document
.getElementById("demo") // ID가 'demo'인 요소를 선택
.innerHTML = "The text from the intro paragraph is: " + element.innerHTML; // 'intro'의 내용을 출력
</script>
getElementsByTagName: 특정 태그 이름을 가진 HTML 요소들을 배열 형태로 가져와 사용할 수 있다.
<!-- 페이지에서 첫 번째 'p' 태그의 내용을 가져와 "demo" ID를 가진 요소에 출력하는 코드 -->
<script>
const element = document.getElementsByTagName("p"); // 모든 'p' 태그를 가져옴
document
.getElementById("demo") // ID가 'demo'인 요소를 선택
.innerHTML = 'The text in first paragraph (index 0) is: ' + element[0].innerHTML; // 첫 번째 'p' 태그의 내용을 출력
</script>
getElementsByClassName: 특정 클래스 이름을 가진 HTML 요소들을 배열 형태로 가져와 사용할 수 있다.
<!-- 페이지에서 특정 클래스의 첫 번째 'p' 태그 내용을 가져와 "demo" ID를 가진 요소에 출력하는 코드 -->
<script>
const element = document.getElementsByClassName("example"); // 클래스가 'example'인 모든 요소를 가져옴
document
.getElementById("demo") // ID가 'demo'인 요소를 선택
.innerHTML = 'The text in first paragraph (index 0) is: ' + element[0].innerHTML; // 첫 번째 요소의 내용을 출력
</script>
: JavaScript를 사용하여 HTML 요소의 내용, 속성, 스타일을 변경할 수 있다.
: HTML 요소의 속성이나 스타일을 변경하는 역할을 한다.
| 속성 | 설명 |
|---|---|
element.innerHTML = new html content | 요소의 내부 HTML 콘텐츠를 변경한다. |
element.attribute = new value | HTML 요소의 속성 값을 변경한다. |
element.style.property = new style | HTML 요소의 스타일을 변경한다. |
: HTML 요소의 속성을 변경할 때 사용한다.
| 메서드 | 설명 |
|---|---|
element.setAttribute(attribute, value) | HTML 요소의 속성 값을 변경한다. |
: HTML 요소를 생성, 추가, 삭제, 교체할 수 있다.
| 메서드 | 설명 |
|---|---|
document.createElement(element) | 새로운 HTML 요소를 생성한다. |
document.removeChild(element) | HTML 요소를 삭제한다. |
document.appendChild(element) | HTML 요소를 추가한다. |
document.replaceChild(new, old) | HTML 요소를 교체한다. |
document.write(text) | HTML 출력 스트림에 내용을 작성한다. |
: HTML 요소에 이벤트 핸들러를 추가하여 특정 이벤트에 반응하도록 한다.
| 메서드 | 설명 |
|---|---|
document.getElementById(id).onclick = function() {code} | onclick 이벤트에 실행할 코드를 추가한다. |
forms 컬렉션에서 id="frm"인 폼 요소를 찾아 해당 폼 내 모든 요소의 값을 표시한다.<script>
// ID가 'frm'인 폼 요소를 가져옴
const form = document.forms["frm"];
// 폼 내 모든 요소 값을 순차적으로 출력
for (let i = 0; i < form.length; i++) {
console.log(form.elements[i].value);
}
</script>
innerHTML 속성을 사용하는 것이다. <!-- id가 'id'인 요소의 내부 HTML 내용을 새로운 HTML로 변경 -->
document.getElementById(id).innerHTML = new HTML;
<!-- id가 'id'인 요소의 특정 속성을 새로운 값으로 변경 -->
document.getElementById(id).attribute = new value;
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
// 'demo' ID를 가진 요소에 현재 날짜를 출력
document.getElementById("demo").innerHTML = "Date : " + Date();
</script>
</body>
</html>
document.write()document.write()를 사용하면 HTML 출력 스트림에 직접 내용을 작성할 수 있다.fname)가 비어 있을 경우, 아래 함수는 경고 메시지를 표시하고, 폼 제출을 방지하기 위해 false를 반환한다.<script>
// 폼 유효성 검사 함수
function validateForm() {
// 'myForm'이라는 이름의 폼에서 'fname' 필드 값을 가져옴
let x = document.forms["myForm"]["fname"].value;
// 입력 값이 비어 있는지 확인
if (x == "") {
// 비어 있을 경우 경고 메시지 표시
alert("이름을 반드시 입력해야 합니다.");
// 폼 제출 방지
return false;
}
}
</script>
<script>
function myFunction() {
// Get the value of the input field with id="numb"
let x = document.getElementById("numb").value;
// If x is Not a Number or less than one or greater than 10
let text;
if (isNaN(x) || x < 1 || x > 10) {
text = "Input not valid";
} else {
text = "Input OK";
}
document.getElementById("demo").innerHTML = text;
}
</script>
브라우저가 HTML 폼 검증을 자동으로 수행할 수 있다.
만약 fname 필드가 비어있으면, required 속성이 해당 폼의 제출을 방지한다.
<form action="/action_page.php" method="post">
<input type="text" name="fname" required>
<input type="submit" value="Submit">
</form>
<script>
document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";
</script>
1) 애니메이션 컨테이너 생성
모든 애니메이션은 컨테이너 요소를 기준으로 수행된다.
2) 요소 스타일 지정
position: relative 스타일로 설정해야 한다. position: absolute 스타일로 설정해야 한다. 3) 애니메이션 코드
<script>
// 박스를 움직이는 함수
function myMove() {
let id = null; // 애니메이션 ID 초기화
const elem = document.getElementById("animate"); // 움직일 요소 선택
let pos = 0; // 초기 위치 설정
clearInterval(id); // 이전 애니메이션 멈춤
id = setInterval(frame, 5); // 5ms마다 frame 함수 실행
// 박스의 움직임을 정의하는 함수
function frame() {
if (pos == 350) { // 목표 위치(350px)에 도달하면 멈춤
clearInterval(id);
} else {
pos++; // 위치를 1px씩 증가
elem.style.top = pos + "px"; // 위쪽 위치 설정
elem.style.left = pos + "px"; // 왼쪽 위치 설정
}
}
}
</script>
1) HTML 이벤트 예시
<h2 onclick="this.innerHTML='Ooops!'">Click on this text!</h2>
<h2 onclick="changeText(this)">Click on this text!</h2>
<script>
function changeText(id) {
id.innerHTML = "Ooops!";
}
</script>
<button onclick="displayDate()">The time is?</button>
<script>
function displayDate() {
document.getElementById("demo").innerHTML = Date();
}
</script>
<button id="myBtn">Try it</button>
<p id="demo"></p>
<script>
document.getElementById("myBtn").onclick = displayDate;
function displayDate() {
document.getElementById("demo").innerHTML = Date();
}
</script>
onload와 onunload 이벤트는 사용자가 페이지에 들어오거나 떠날 때 발생한다.
onload 이벤트는 방문자의 브라우저 유형과 버전을 확인하고, 이에 따라 적절한 웹 페이지 버전을 로드하는 데 사용할 수 있다. onload와 onunload 이벤트는 쿠키 처리에도 사용할 수 있다.<script>
// 쿠키 사용 가능 여부를 확인하는 함수
function checkCookies() {
let text = ""; // 결과 메시지를 저장할 변수
if (navigator.cookieEnabled == true) {
// 쿠키가 활성화되어 있을 경우
text = "Cookies are enabled.";
} else {
// 쿠키가 비활성화되어 있을 경우
text = "Cookies are not enabled.";
}
// 결과 메시지를 HTML 요소에 삽입
document.getElementById("demo").innerHTML = text;
}
</script>
onchange 이벤트는 입력 필드 검증과 함께 자주 사용된다.
사용자가 입력 필드의 내용을 변경하면 onchange 이벤트가 발생한다.
아래는 onchange 이벤트를 사용하는 예제이다.
사용자가 내용을 변경하면 upperCase() 함수가 호출된다.
<script>
function upperCase() {
const x = document.getElementById("fname");
x.value = x.value.toUpperCase();
}
</script>
<input type="text" id="fname" onchange="upperCase()">
onmouseover와 onmouseout 이벤트는 사용자가 HTML 요소 위로 마우스를 이동하거나,
요소를 벗어날 때 함수를 호출하도록 사용할 수 있다.
<script>
function mouseOver() {
document.getElementById("demo").style.color = "red";
}
function mouseOut() {
document.getElementById("demo").style.color = "black";
}
</script>
<p id="demo" onmouseover="mouseOver()" onmouseout="mouseOut()">
Hover over this text.
</p>
getElementById(id) - ID로 특정 요소 찾기.getElementsByTagName(name) - 태그 이름으로 요소 배열 반환.getElementsByClassName(name) - 클래스 이름으로 요소 배열 반환.element.innerHTML), 스타일(element.style.property), 메서드(element.setAttribute)로 요소 변경 가능.createElement), 추가(appendChild), 삭제(removeChild), 교체(replaceChild) 가능.innerHTML 속성을 사용해 HTML 콘텐츠를 동적으로 변경 가능.element.attribute로 요소의 속성을 동적으로 변경.style.property로 HTML 요소의 스타일 변경 가능.setInterval과 CSS 스타일 변경으로 애니메이션 구현.onclick, onmouseover, onchange 등)에 반응하도록 코드 작성.onload와 onunload 이벤트onchange 이벤트onmouseover와 onmouseout 이벤트