Document: HTML
렌더링에는 렌더링 엔진 필요
렌더링엔진
렌더링엔진: 웹페이지를 렌더링하기 위해 웹 브라우저에서 사용하는 소프트웨어
렌더링 순서
DOM Tree : 태그의 상하관계 , Style Rule : CSS ,
DOM : DOM Tree와 Style Rule이 병합되어 만들어 진다
내부 Javascript
외부 Javascript
인라인 Javascript
ex02DOM.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ex02DOM활용</title>
</head>
<body>
<div id="temp">
<p>빅데이터반 화이팅</p>
<h3 class="lunch">오늘 점심은 뭐 먹지?</h3>
</div>
<script>
// DOM == document
// 모든 html의 요소를 상하관계를 분리해 객체로 만들어서 가지고 있는
// Document Object Model
// DOM안에서 원하는 요소(태그)를 가져오는 방법
// 1. querySelector('css선택자')
// --> 딱 하나의 첫번째 요소만 되돌려준다.
let h3 = document.querySelector('.lunch');
// 여러개의 요소를 가져오고 싶을때는
// querySelectorAll을 사용한다. --> 배열과 같은 형태로 되돌려준다
let all_h3 = document.querySelectorAll('.lunch');
console.log(h3);
console.log(all_h3);
console.log(all_h3[0]);
// 2. getElement~~~
// getElementById('id값') --> # 절대 붙이지 말것
// --> 하나의 요소만 되돌려 줄때 사용하는 기능(id는 유일한 한값만 존재)
let div = document.getElementById('temp');
console.log(div);
let all_h3_2 = document.getElementsByClassName('lunch');
console.log(all_h3_2);
document.getElementsByTagName('h3');
// querySelector vs getElement~~~
// query~~~가 더 자세한 리턴타입(HTMLElementTagName)을 되돌려준다.
// getEle~~~가 포괄적인 리턴타입 (HTMLElement) 되돌려준다.
</script>
</body>
</html>
ex03DOM.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="text1"></div>
<button onclick="addText()">클릭 해보기</button>
<script>
// 1. 내가 필요한 태그들이 어떤 것들이 있는가?
let div = document.getElementById('text1');
let btn = document.querySelector('button');
// 2. 버튼을 클릭했을 때(이벤트가 발생했을 때) 처리
// 이벤트 추가하는 방법
// -요소.addEventListener('이벤트종류',함수)
btn.addEventListener('click',function(){
div.innerHTML += '이벤트 발생!<br>';
//클릭을 누를때마다 div 안의 html에 이벤트발생! 글자 누적
});
// 객체의 property를 활용해서 추가하는 방법
btn.onclick = function(){
div.innerHTML += '이벤트발생!2<br>';
}
// onclick과 같이 property를 활용해서 추가하는 방법은
// 똑같은 property를 하단에서 다시 새롭게 정의해버리면
// 기존에 있었던 값이 덮어 씌워져 버린다.
// addEventListener와 onlick property를 활용해서 클릭했을때
// (중복가능)
// 두개가 중복해서 실행하게 만들 수 있다.
//함수 선언문 사용해서 함수 하나 생성하기
function addText(){
div.innerHTML += '이벤트발생!3<br>'
}
</script>
</body>
</html>
ex04DOM실습.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>클릭 한 번 해볼까요?</h1>
<button >h1태그 생성</button>
<button >a태그 생성</button>
<button >ul태그 생성</button>
<div id="text"></div>
<script>
// 1. 어떤 태그들을 가져와야 할까?
// 버튼태그 3개를 한번에 가지고 오기
let div = document.getElementById('text');
let btns = document.querySelectorAll('button');
// 각각의 태그들에 어떤 이벤트를 처리하게 만들어줄까?
btns[0].addEventListener('click',function(){
div.innerHTML += '<h1>행복한 Javascript 수업</h1><br>';
});
btns[1].onclick = function(){
div.innerHTML += '<a href="https://smhrd.or.kr/">스마트인재개발원 홈페이지로이동</a>'
};
let addText = () => {
div.innerHTML += '<ul><li>🍕배고프다🍕</li><li>🍔배고프다🍕</li><li>🍿배고프다🥞</li></ul>'
}
btns[2].onclick = addText;
// 여러 방법을 이용해서 이벤트 추가
</script>
</body>
</html>
ex05DOM실습.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text">
<button>클릭</button>
<script>
//input태그에 입력한 값이 alert창으로 나온 후 클릭하면 input태그 값 삭제
// 1. 태그들 가져오기
let input = document.querySelector('input');
let btn = document.querySelector('button');
// 2. 이벤트 처리하기
btn.addEventListener('click',function(){
// 3. input태그 안에 있는 텍스트를 가져와서 알림창으로 띄워주기
// --> input태그는 닫는 태그가 존재하지 않는다. -> innerHTML사용 불가
// --> value라는 attr를 기준으로 안에 있는 글자를 가져올 수 있다.
alert(input.value);
input.value = '';
});
// DOM의 요소들을 가져왔을 때 사용할 수 있는 property
// 1. 태그.innerHTML
// : 닫는 태그가 존재하는 태그들에 내부 내용을 가져오거나
// 변경하고 싶을 때 사용하는 기능
// 2. 태그.attribute
// : 각각의 태그들의 속성을 가져오거나 변경할 수 있는 방법
// ex) input.value / img.src / a.href
// 3. 태그.style.스타일속성명
// : 각각의 태그들의 스타일 속성을 가져오거나 변경할 수 있는 방법
// ex) div.style.width ='300px'
</script>
</body>
</html>
복습
자바스크립트
1) 객체
: 속성, 메소드를 하나로 묶은 자료형
ex) let person= {
속성명 : 값,
속성명1 : 값1,
메소드명 : function(){
}
or
메소드명 : 함수 (만들어진 함수 참조)
};
2) DOM
: Document Object Model
-> html 내부에 있는 각각의 요소(태그)들을 자바스크립트에서
접근 가능하게끔 객체화 시킨 모델
-> 내가 원하는 요소에 접근하는 방법
ex) <div id = "text">안녕?</div>
<button>클릭</button>
1) document.getElementById('text') 아이디값 , id text를 기준으로 가져온다
2) document.querySelector('#text') 아이디선택자
--> 무조건 하나의 요소만 되돌려준다.
3) document.querySelectorAll('css선택자')
--> 배열과 같은 형태로 되돌려 준다.
4) document.getElementsByClassName('클래스명')
5) document.getElementsByTagName('태그명')
6) document.getElementsByName('이름속성명')
--> 배열과 같은 형태로 되돌려준다.
ex) <div id = "text">안녕?</div>
<button>클릭</button>
let div = document.getElementById('text')
let btn = document.querySelector('button')
btn.addEventListener('click',function(){ --> div안의 안녕?을 alert 창으로 출력
alert(div.innerHTML)
})
btn.onclick = function(){alert(div.innerHTML)}
1. 요소안에 있는 데이터 가져오기
요소이름.innerHTML (닫히는태그까지 있을때)
2. 요소의 속성을 가져오기
요소이름.속성이름
ex) img.src / input.value / a.href
3. 요소의 스타일 변경하기
요소이름.style.css속성
ex06DOM이미지변경.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="img/11.png">
<br>
<button>이미지변경</button>
<script>
// img1이면 img2로변경, img2이면 img1로 변경
// 조건에 따라 서로 다른 로직수행 조건문 활용
// 1. 요소들을 가져오기
let img = document.querySelector('img');
let btn = document.querySelector('button');
// 2. 이벤트 처리하기
btn.addEventListener('click', function () {
console.log(img.src);
if (img.src == "http://127.0.0.1:5500/JS%EA%B0%9C%EC%9A%94/03Object,DOM/img/11.png") {
img.src = "img/22.png";
} else {
img.src = "img/11.png";
}
});
//if (img.src == "http://127.0.0.1:5500/JS%EA%B0%9C%EC%9A%94/03Object,DOM/img/11.png")
// img.src == "img/11.png가 아니라 console에서 console.log(img.src)로 경로를 찾아서 해야한다."
</script>
</body>
</html>
ex07Element스타일변경.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 300px;
height: 300px;
background-color: skyblue;
}
</style>
</head>
<body>
<div></div>
<button>원</button>
<button>직사각형</button>
<script>
// 1. 태그들 가져오기
let div = document.querySelector('div');
let btn = document.querySelectorAll('button');
// 2. 각각의 버튼들에 대한 이벤트 처리하기
btn[0].addEventListener('click',function(){
// 3. div 태그를 원 형태로 변경
div.style.borderRadius = '50%';
div.style.backgroundColor = 'gray';
});
// 한번 바꾼 스타일은 유지 -> 원에서 직사각형으로 만들때는 다시 borderRadius 0%로
btn[1].addEventListener('click',function(){
// 4. div 태그를 직사각형 형태로 변경
div.style.borderRadius = '0%';
div.style.backgroundColor = 'tomato';
});
</script>
</body>
</html>
ex08위시리스트.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="css/input.css">
<link rel="stylesheet" href="css/list.css">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>위시리스트</title>
</head>
<body>
<div id="wrapper">
<h2>위시리스트</h2>
<!-- onsubmit=return false : 새로고침 안되게 만드는 방법-->
<form onsubmit="return false">
<input type="text" id="item">
<button id="add" class="addBtn">추가</button>
</form>
<!--위시리스트를 추가할 때마다 해당하는 데이터가 하나씩 추가될 공간-->
<div id="itemList">
<ul>
<li>
시드니 멘리 다시가기
<span class="close">X</span>
</li>
</ul>
</div>
</div>
<script>
// 1. 사용자가 추가하기를 누른 데이터를 가져와서
// itemList안쪽에다가 ul태그 형식으로 출력
// 1-1) 태그들을 가져오기
let input = document.querySelector('#item');
let btn = document.querySelector('#add');
let div = document.getElementById('itemList');
let list = [];
//이벤트 밖에 생성해서 계속 초기화 되지 않게
let remove = function () {
list.splice(this.id, 1);
// this 키워드는 클릭이벤트가 발생한 태그 자체를 의미한다.
// span[i]는 function안으로 들어 올 수 없다.
show();
}
// itemList라는 div 태그 안에
// 내가 추가한 데이터를 전부 집어넣어주고
// span태그에게 클릭이벤트를 추가해주는 함수
let show = function () {
let content = '<ul>';
for (let i = list.length - 1; i >= 0; i--) {
content += '<li>' + list[i] + '<span id="' + i + '" class="close">X</span></li>';
}
content += '</ul>';
div.innerHTML = content;
// 2. span 태그를 가져오기
// 클릭 후에 span태그가 반복문에서 만들어지기 때문에 click 이벤트안에서 가져와야한다
let span = document.querySelectorAll('span');
// 3. span 태그들에게 전부 클릭 이벤트를 걸어주기
for (let i = 0; i < span.length; i++) {
//참조하는 형식으로 추가해주기
span[i].onclick = remove;
}
}
// 1-2) 버튼에 이벤트 처리하는 기능 추가하기
btn.addEventListener('click', () => {
// 최근에 입력한 데이터가 위쪽에 출력되게
// 배열 생성해서 클릭할 때마다 배열안에 input 태그안에 있는 글자 추가하기
// div 태그 내부에 배열의 마지막 인덱스 데이터 부터
// 순차적으로 배치해서 출력하기
let text = input.value;
list.push(text);
// 1-3) input 태그 안에 있는 글자 가져오기
// input은 닫는 태그 없으니까 innerHTML이 아니라 value로 값 가져오기
// 1-4) div 태그 안쪽에 태그 형식으로 (위쪽 참고)
// 해당하는 데이터 추가
show();
// 1-5) input 태그 안에 있는 글자 지우기
input.value = '';
});
</script>
</body>
</html>
'빅데이터 서비스 교육 > Java Script' 카테고리의 다른 글
Java Script AJAX (0) | 2022.05.31 |
---|---|
JaVaScript jQuery (0) | 2022.05.30 |
Java Script 배열, 함수, 객체 (0) | 2022.05.24 |
Java 입출력문, 조건문, 반복문 (0) | 2022.05.23 |